全域性變數與區域性變數的本質區別在於作用域:
全域性變數是在整個py檔案中宣告的,全域性範圍內都能訪問;
區域性變數是在某個函式中宣告的,只能在該函式中呼叫它,如果試圖在超出範圍的地方呼叫,程式就會崩掉。
如果在函式內部定義某個與全域性變數一樣名稱的區域性變數,就可能導致意外的效果,不建議這樣使用,這樣會使程式不健全。
例1:def fun(x):
y=2print("乘法的執行結果:",x*y)
num1=1
print("初始num1=",num1)
fun(num1)
print("y的值是:",y)
執行結果:
初始num1= 1
乘法的執行結果: 2
traceback (most recent call last):
file "/home/python/desktop/mx_dynamic_query_rtree2/test.py", line 18, in
print("y的值是:",y)
nameerror: name 'y' is not defined
原因是:試圖訪問區域性變數,但是訪問的地方不在該變數y的作用域中,變數y是在函式內部定義的乙個區域性變數,所以該變數的作用域為該函式內部,在函式外部訪問該區域性變數y會報錯!
例2:def fun():
num1 = 2
print("函式內修改後num1=", num1)
num1 = 1
print("初始num1=", num1)
fun()
print("執行完函式後num1=", num1)
執行結果:
初始num1= 1
函式內修改後num1= 2
執行完函式後num1= 1
可以看到在函式內部對全域性變數修改後,在函式執行完畢,修改的結果是無效的,全域性變數並不會受到影響。
例3:def fun():
num1 *= 2
print("函式內修改後num1=", num1)
num1 = 1
print("初始num1=", num1)
fun()
print("執行完函式後num1=", num1)
執行結果:
初始num1= 1
traceback (most recent call last):
file "/home/python/desktop/mx_dynamic_query_rtree2/test.py", line 15, in
fun()
file "/home/python/desktop/mx_dynamic_query_rtree2/test.py", line 11, in fun
num1 *= 2
unboundlocalerror: local variable 'num1' referenced before assignment
報錯,這是因為在函式中使用了區域性變數num1,它只是個跟全域性變數同名的區域性變數,使用前還是要賦值。
例4:如果真的想在函式體內修改全域性變數的值,可以使用global關鍵字
def fun():
global num1
num1=2
print("函式內修改後num1=",num1)
num1=1
print("初始num1=",num1)
fun()
print("執行完函式後num1=",num1)
執行結果:
初始num1= 1
函式內修改後num1= 2
執行完函式後num1= 2
使用global關鍵字就是告訴python編輯器,這個變數不是區域性變數而是全域性變數,其實有點像"引用"的意思。
例5:關鍵字nonlocal,字面意思是當前這個變數不是區域性變數,它是python3.0中新增的關鍵字,python2.x中不支援。
def fun():
num2 = 3
def fun2():
num2 *= 2
print("num2=", num2)
return fun2()
fun()
報錯!!錯誤的原因跟前面的差不多,就是使用了未定義的區域性變數,然而num2也不是全域性變數,只是fun2函式的外層變數,強行使用global定義num2的話同樣會報錯。
加上nonlocal關鍵字:
def fun():
num2 = 3
def fun2():
nonlocal num2
num2 *= 2
print("num2=", num2)
return fun2()
fun()
執行結果:num2= 6
Python中全域性變數與區域性變數
1.定義 區域性變數 在函式中定義的變數一般只能在該函式內部使用,這些只能在程式的特定部分使用 全域性變數 在乙個檔案頂部定義的變數,可以供該檔案中任意函式呼叫 全域性變數與區域性變數兩者的本質區別就是在於作用域。全域性變數是在整個py檔案中宣告,全域性範圍內都可以訪問。區域性變數是在某個函式中宣告...
python中全域性變數與區域性變數
標籤 python 比如 a 1 def f b 2其中a就是全域性變數,而b是區域性變數。區域性變數只在函式體內部有效,出了函式體,外面是訪問不到的,而全域性變數則對下面的 都有效。全域性變數可以直接在函式體內容部使用的,你可以直接訪問,但是注意的是,如果對於不可變型別的資料,如果在函式裡面進行了...
Python中的全域性變數與區域性變數
from math import from numpy import 巢狀函式,fun2 中有 fun3,python3中才引用了nonlocal解決多層巢狀的函式變數引用問題,nonlocal意為函式外層的變數,而非全域性變數 def fun2 num2 3 def fun3 nonlocal n...