Python語言(五)變數作用域

2021-06-23 06:45:09 字數 1919 閱讀 6784

變數的作用是有範圍的,準確說世上任何事物對外作用都是有範圍限制的。而變數或者符號,背後代表著不同的意思,能對他們求值,就要去在求值的地方能看見它們,這些地方就是變數的作用域。

作用域粗略的可以分為區域性作用域和全域性作用域。

區域性變數就具有區域性作用域,分為函式內變數、類變數和檔案訪問變數。作用域不同,變數的初始化時間也不相同、預設的初始值也會不同,這跟不同語言的實現相關。

每次函式呼叫時,執行系統都會為函式建立區域性環境,這個環境裡就儲存了一些區域性變數的值,以便執行函式內語句時,對區域性變數進行取值。這其中,包括函式的形參,當發生函式呼叫時,首先會將實參賦給形參,並函式內定義的變數也儲存在這個區域性環境裡,每次呼叫都重新賦值。

>>> total = 0

>>> def sum_f(x, y):

total = x + y

print "inside the function, value of total is: ", total

>>> sum_f(3, 4)

inside the function, value of total is: 7

>>> print "outside the function, value of total is: ", total

outside the function, value of total is: 0

>>>

以上述為例,x、y和total都是區域性變數,在變數結束後,儲存這些值的區域性環境會被銷毀。但是x、y與total有點不同,因為在全域性變數裡有個同名的變數也叫total,這個全域性變數儲存在全域性環境裡。在函式內,區域性變數會遮蔽全域性變數,如果有同名的話。從上述**可以看出,全域性的total值並沒有被改變。

>>> total = 0

>>> def sum_f(x, y):

global total

total = x + y

print "inside the function, value of total is: ", total

>>> sum_f(3, 4)

inside the function, value of total is: 7

>>> total

7>>> x

traceback (most recent call last):

file "", line 1, in x

nameerror: name 'x' is not defined

#x變數未定義,注意變數total在函式內與上面所列**的不同之處

global修飾的變數total表明,函式sum_f裡的total是全域性變數,因此在函式呼叫結束後,輸出的total值跟函式內是相同的。同時,在函式呼叫結束後,試圖訪問x變數,這是執行系統給出錯誤提示,"name 'x' is not defined",這句話驗證了上面提到的,函式呼叫發生時,會建立區域性環境以儲存形參的值,在函式呼叫結束時,這個區域性環境被銷毀。

與函式變數不同。類變數和類方法繫結,作為自定義的一種型別,叫做「封裝」。也就是類變數在類內部都是可見的,不管類方法是public還是private。

全域性變數就是在全域性方位內,該變數都是可見的,無論是在函式內,還是在類內部。但是如果這三者之間發生變數相同時,訪問的優先順序是不同的,高低順序與它們的作用範圍大小相反,也就是函式變數高於類變數、高於全域性變數。

variable和identifier的區別不是那麼容易劃分的,就像**與資料的界限也不是那麼清晰的。標示符背後可以代表數、符號和「計算過程」——函式。自定義的全域性方程foo與某語言提供的全域性操作符加號(+),本質上是一樣的,都代表著某種計算模式。但是為了便於符號間的隔離,符號名重名,尤其是在大規模多人開發的程式中,將標示符進行按某種功能相近放在一起,作為乙個訪問單元,有效緩解重名問題。這就是c語言的include,c++的namespace,和python的import的目的。當然也是為了編譯的方便。

python變數作用域

變數作用域 scope 在python中是乙個容易掉坑的地方。什麼是作用域 作用域簡單說就是乙個變數的命名空間。中變數被賦值的位置,就決定了哪些範圍的物件可以訪問這個變數,這個範圍就是命名空間。python賦值時生成了變數名,當然作用域也包括在內。python的作用域一共有4中,分別是 l loca...

Python 變數作用域

g global defchange global g g g change print g change print g 結果 global globalchange def function g function deflocalvar g local defglobalvar global g...

變數作用域 python

python 中,程式的變數並不是在哪個位置都可以訪問的,訪問許可權決定於這個變數是在 賦值的。變數的作用域決定了在哪一部分程式可以訪問哪個特定的變數名稱。python的作用域一共有4種,分別是 以 l e g b 的規則查詢,即 在區域性找不到,便會去區域性外的區域性找 例如閉包 再找不到就會去全...