局部變量和全局變量
所謂局部變量,指的是定義在函數內的變量,只能在函數內使用,它與函數外具有相同名稱的其他變量沒有任何關系。不同函數中,可以使用相同名字的局部變量,它們代表不同對象,互不干擾。此外,函數的形式參數也屬於局部變量,作用范圍僅限於函數內部。
在函數之外定義的變量稱為全局變量,全局變量在整個程序范圍內有效。
a = 0 # 全局變量a
def sum(x,y):
a = x+y # 局部變量a
print('函數內是局部變量:',a)
return a
sum(10,20)
print('函數外是全局變量:',a)
運行結果:
函數內是局部變量:30
函數外是全局變量:0
tips:寫程序最好不要用兩個名字相同的變量,容易引起歧義。
global 和 nonlocal關鍵字
當內部作用域想要使用外部作用域的變量是,可使用global和nonlocal關鍵字。
- global關鍵字
在函數內部修改一個定義在函數外的變量是,須使用global關鍵字明確聲明變量。在函數內部通過global關鍵字來聲明或定義全局變量,可分為兩種情況:
(1)一個變量已在函數外定義,如果在函數內需要使用該變量的值或修改該變量的值,並將修改結果反映到函數外,可以在函數內用關鍵字global明確聲明該全局變量。
(2)在函數內部直接使用global關鍵字將一個變量聲明為全局變量,如果在函數外沒有定義該全局變量,在調用該函數后,會創建新的全局變量。
num = 1
def fun():
global num
num += 1
print('函數內num的值為:',num)
fun()
print('函數外num的值為:',num)
運行結果為:
函數內num的值為:2
函數外num的值為:2
tips:在函數內用global關鍵字將變量num聲明為全局變量,因此,在函數內變量num的初始值也為1,執行num+=1后,num的值為2,並將修改的結果反映到函數外,因此函數外的num輸出也為2。
- nonlocal關鍵字
如果要在一個嵌套的函數中修改嵌套作用域中的變量,則須使用nonlocal關鍵字。
def outer():
num = 1
def inner():
nonlocal num # nonlocal 關鍵字聲明
num = 2
print('inner函數中的num值為:',num)
inner() # 調用inner函數
print('outer函數中num的值為:',num)
outer() # 調用outer函數
運行結果為:
inner函數中的num值為:2
outer函數中num的值為:2
tips:在inner函數中使用了nonlocal關鍵字,就會告訴python在inner()函數中使用了outer()函數中的變量num,對變量num進行修改時,會直接影響outer()函數中的num變量。因此,程序在inner()函數和outer()函數中的輸出都是2。