創新互聯www.cdcxhl.cn八線動態BGP香港云服務器提供商,新人活動買多久送多久,劃算不套路!
小編給大家分享一下Python變量的作用域有什么用,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討方法吧!
在寫代碼的時候,免不了要使用變量。但程序中的一個變量并不一定是在哪里都可以被使用,根據情況不同,會有不同的“有效范圍”。
看這樣一段代碼:
def func(x): print ('X in the beginning of func(x): ', x) x = 2 print ('X in the end of func(x): ', x) x = 50func(x)print ('X after calling func(x): ', x)
輸出:
X in the beginning of func(x): 50 X in the end of func(x): 2 X after calling func(x): 50
變量 x 在函數內部被重新賦值。但在調用了函數之后,x 的值仍然是50。為什么?
這就得說一下變量的“作用域”:
當函數內部定義了一個變量,無論是作為函數的形參,或是另外定義的變量,它都只在這個函數的內部起作用。函數外即使有和它名稱相
同的變量,也沒有什么關聯。這個函數體就是這個變量的作用域。像這樣在函數內部定義的變量被稱為“局部變量”。
要注意的是,作用域是從變量被定義的位置開始。像這樣的寫法是有問題的:
def func(): print (y) y = 2 print (y)
報錯:
UnboundLocalError: local variable 'y' referenced before assignment
因為在 y = 2 之前,y 并不存在,調用 y 的值就會出錯。
回到開始那個例子:
在函數 func 外部,定義的變量 x,賦值為 50,作為參數傳給了函數 func。而在函數 func 內部,變量 x 是形參,它的作用域是整個函數體內部。它與外面的那個 x 沒有關系。只不過它的初始值是由外面那個 x 傳遞過來的。
所以,雖然函數體內部的 x 被重新賦值為 2,也不會影響外面那個 x 的值。
不過有時候,我們希望能夠在函數內部去改變一些變量的值,并且這些變量在函數外部同樣被使用到。怎么辦?
一種方法是,用 return 把改變后的變量值作為函數返回值傳遞出來,賦值給對應的變量。比如開始的那個例子,可以在函數結尾加上
return x
然后把調用改為
x = func(x)
還有一種方法,就是使用“全局變量”。
在 Python 的函數定義中,可以給變量名前加上 global 關鍵字,這樣其作用域就不再局限在函數塊中,而是全局的作用域。
通過 global 改寫開始的例子:
def func(): global x print ('X in the beginning of func(x): ', x) x = 2 print ('X in the end of func(x): ', x) x = 50func()print ('X after calling func(x): ', x)
輸出:
X in the beginning of func(x): 50 X in the end of func(x): 2 X after calling func(x): 2
函數 func 不再提供參數調用。而是通過 global x 告訴程序:這個 x 是一個全局變量。于是函數中的 x 和外部的 x 就成為了同一個變
量。這一次,當 x 在函數 func 內部被重新賦值后,外部的 x 也隨之改變。
前面講的局部變量和全局變量是 Python 中函數作用域最基本的情況。實際上,還有一些略復雜的情況,比如:
def func(): print ('X in the beginning of func(x): ', x) # x = 2 print ('X in the end of func(x): ', x) x = 50func()print ('X after calling func(x): ', x)
輸出:
X in the beginning of func(x): 50 X in the end of func(x): 50 X after calling func(x): 50
程序可以正常運行。雖然沒有指明 global,函數內部還是使用到了外部定義的變量。然而一旦加上
x = 2
這句,程序就會報錯。因為這時候,x 成為一個局部變量,它的作用域從定義處開始,到函數體末尾結束。
建議在寫代碼的過程中,顯式地通過 global 來使用全局變量,避免在函數中直接使用外部變量。
看完了這篇文章,相信你對Python變量的作用域有什么用有了一定的了解,想了解更多相關知識,歡迎關注創新互聯-成都網站建設公司行業資訊頻道,感謝各位的閱讀!
當前題目:Python變量的作用域有什么用-創新互聯
文章分享:http://newbst.com/article30/dgieso.html
成都網站建設公司_創新互聯,為您提供ChatGPT、網站排名、App設計、電子商務、微信小程序、虛擬主機
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯