變數的作用是有範圍的,準確說世上任何事物對外作用都是有範圍限制的。而變數或者符號,背後代表著不同的意思,能對他們求值,就要去在求值的地方能看見它們,這些地方就是變數的作用域。
作用域粗略的可以分為區域性作用域和全域性作用域。
區域性變數就具有區域性作用域,分為函式內變數、類變數和檔案訪問變數。作用域不同,變數的初始化時間也不相同、預設的初始值也會不同,這跟不同語言的實現相關。
每次函式呼叫時,執行系統都會為函式建立區域性環境,這個環境裡就儲存了一些區域性變數的值,以便執行函式內語句時,對區域性變數進行取值。這其中,包括函式的形參,當發生函式呼叫時,首先會將實參賦給形參,並函式內定義的變數也儲存在這個區域性環境裡,每次呼叫都重新賦值。
>>> 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 的規則查詢,即 在區域性找不到,便會去區域性外的區域性找 例如閉包 再找不到就會去全...