首頁 > 軟體

Python函數名稱空間和作用域(Local與Global)

2022-03-08 13:00:03

摘要:

Python函數是一個包裝起來的程式碼塊,通過前面的返回函數,閉包函數等課程,我們發現其內部變數定義在不同的位置,使用起來的效果就有所不同,這就是python函數的作用域和名稱空間。

1.Local作用域

a = 100
def func5():
    b = 50
    a = 99
    print('函數內a', a)
    print('函數內b', b)

print('函數外a', a)
func5()
print('函數外b', b)

返回結果:

函數外a 100
函數內a 99
函數內b 50
Traceback (most recent call last):
  File "C:/Users/Administrator/Desktop/python知識總結/2.python自學網-通用模組-視訊原始碼/test.py", line 12, in <module>
    print('函數外b', b)
NameError: name 'b' is not defined

上面函數中定義b變數,所以外面無法輸出。

2.Enclosing function locals作用域

a = 100
def func5():
    b = 50
    print('函數內a', a)
    print('函數內b', b)
    def func6():
        print('下層函數內a', a)
        print('下層函數內b', b)
    func6()
func5()

返回結果:

函數內a 100
函數內b 50
下層函數內a 100
下層函數內b 50

3.Global全域性變數

a = 123
def func():
    a = 100
    print(a)
print(a)
func()
print(a)

a = 123
def func():
    global a  # 這裡不能使用nonlocal
    a = 100
    print(a)
    print(locals())  # 檢視區域性變數
    print(globals())  # 檢視全域性變數
print(a)
func()
print(a)

4.非區域性變數nonlocal

def func5():
    b = 50
    print(b)
    def func6():
        nonlocal b  # 非區域性的,只適用於閉包內部
        b = 60
        print(b)
    func6()
    print(b)
func5()

5.就近原則

b = 1111
def func5():
    b = 50
    print(b)
    def func6():
        b = 60
        print(b)  # 這裡的b從內到外究竟查詢
    func6()
    print(b)
func5()


a = 100
def func5():
    b = 50
    print(a)
    print(b)
    def func6():
        b = 60
        print(b)
        print(a)
func5()

6.函數執行順序

a = 123
def func1():
    print(a)
    print(b)
func1()  # 不能列印b
b = 456
func1()  # 可以列印b

7.迴圈、判斷程式碼塊中作用域問題

if True:
    a = 100
print(a)


for i in range(1, 10):
    print(i)
print(i)

迴圈程式碼塊中沒有作用域這樣的情況。

到此這篇關於Python函數名稱空間和作用域(Local與Global)的文章就介紹到這了,更多相關Python名稱空間和作用域內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com