1.全局變量和局部變量
全局變量:指在函數之外定義的變量,一般沒有縮進,在程序執行的全過程有效
局部變量:指在函數內部使用的變量,僅在函數內部有效,當函數退出時變量將不存在
例如:
1 n=1 #n是全局變量
2 deffunc(a,b):3 c=a*b #c是局部變量,a和b作為函數參數也是局部變量
4 returnc5 s=func("knock~",2)6 print(c)
Traceback (most recent call last):
File "F:\pyrhon\函數對變量的作用.py", line 6, in
print(c)
NameError: name 'c' is not defined
這個例子說明,當函數執行完退出后,其內部變量將被釋放。
如果函數內部使用了全局變量呢?例如:
n=1 #n是全局變量
deffunc(a,b):
n=b #這個n是在函數內存中新生成的局部變量,不是全局變量
return a*b
s=func("knock~",2)print(s,n) #測試一下n值是否發生改變
knock~knock~ 1
函數func()內部使用了變量n,并且將變量參數b賦值給變量n,為何n值沒有改變?
因為函數func()有自己的內存空間,它將n=b語句理解為生成一個局部變量n,并將參數b賦值給它,此時func()函數沒有將n當作全局變量。所以,函數退出后,局部變量n被釋放,全局變量n的值沒有改變。
如果希望讓func()函數將n當作全局變量,需要在變量n使用前顯式說明該變量未全局變量,修改后:
1 n=1 #n是全局變量
2 deffunc(a,b):3 globaln4 n=b #將局部變量b賦值給全局變量n
5 return a*b6 s=func("knock~",2)7 print(s,n) #測試一下n值是否發生改變
knock~knock~ 2
2.python函數對變量的作用遵守原則:
(1)簡單數據類型變量無論是否與全局變量重名,僅在函數內部創建和使用,函數退出后變量被釋放,如有全局同名變量,其值不變。
(2)簡單數據類型變量在用global保留字聲明后,作為全局變量使用,函數退出后該變量保留且值被函數改變。
(3)對于組合數據類型的全局變量,如果在函數內部沒有被真實創建的同名變量,則函數內部可以直接使用并修改全局變量的值。
(4)如果函數內部真實創建了組合數據類型變量,無論是否有同名全局變量,函數僅對局部變量進行操作,函數退出后局部變量被釋放,全局變量值不變。
思考:如果全局變量不是整數n,而是列表類型ls,會怎么樣呢?
本篇主要講述函數對程序中變量的作用問題,涉及組合數據類型,后期會持續更新講解。