變量作用域


局部變量和全局變量

所謂局部變量,指的是定義在函數內的變量,只能在函數內使用,它與函數外具有相同名稱的其他變量沒有任何關系。不同函數中,可以使用相同名字的局部變量,它們代表不同對象,互不干擾。此外,函數的形式參數也屬於局部變量,作用范圍僅限於函數內部。

在函數之外定義的變量稱為全局變量,全局變量在整個程序范圍內有效。

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關鍵字。

  1. 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。

  1. 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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM