python中的全大發彩局票網站開發變量與局部變量的區別
全局變量是在整個py文件中聲明的,全局範圍內都能訪問;
局部變量是在某個函數中聲明的,只能在該函數中調用它,如果試圖在超出範圍的地方調用,程序就會崩掉。
如果在函數內部定義某個與全局變量一樣名稱的局部變量,就可能導致意外的效果,不建議這樣使用,這樣會使程序不健全。
例1:
def fun(x):
y=2
print("乘法的運行結果:",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 <module>
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)
print("運行完函數後num1=", num1)
運行結果:
初始num1= 1
Traceback (most recent call last):
File "/home/python/Desktop/MX_Dynamic_Query_RTree2/test.py", line 15, in <module>
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中的全大發彩局票網站開發變量與局部變量的區別