Python3 中的nonlocal用法

2021-10-20 21:33:02 字數 1735 閱讀 4433

我先說一下官網的nonlocal的用法:

官網的解釋雖然很好,但是不好理解,我們直接使用**進行理解:

count =

1defa(

):count =

'a函式裡面'

#如果不事先宣告,那麼函式b中的nonlocal就會報錯

defb()

:nonlocal count

print

(count)

count =

2 b(

)print

(count)

if __name__ ==

'__main__'

: a(

)print

(count)

執行結果是:

a函式裡面

21

該**就可以很好的解釋了,第一行的count和a()函式中的count是兩個變數,而a()函式中的count變數只是在該函式內部起作用,因為它是乙個區域性變數。

nonlocal只能在封裝函式中使用,在外部函式先進行宣告,在內部函式進行nonlocal宣告,這樣在b()函式中的count與a()中的count是同乙個變數。

nonlocal錯誤的使用方法

1.在外部函式進行宣告

'''

'''count =

1defa(

):#nonlocal count #這種宣告方法肯定報錯,

defb()

:nonlocal count #在a()函式中沒有提前宣告,所以報錯

print

(count)

count =

2 b(

)print

(count)

if __name__ ==

'__main__'

: a(

)print

(count)

報錯**:

file "g:/python/pycharm/test.py"

, line 5

nonlocal count

^syntaxerror: no binding for

nonlocal

'count' found

2.外部函式中變數宣告為global

'''

'''count =

1defa(

):global count

count =

'a函式裡面'

defb()

:nonlocal count

print

(count)

count =

2 b(

)print

(count)

if __name__ ==

'__main__'

: a(

)print

(count)

報錯**:

file "g:/python/pycharm/test.py"

, line 7

nonlocal count

^syntaxerror: no binding for

nonlocal

'count' found

Python中global與nonlocal 宣告

如下 a 10 def foo a 100 執行foo 結果 a 還是10 函式中對變數的賦值,變數始終繫結到該函式的區域性命名空間,使用global 語句可以改變這種行為。a 10 def foo global a a 100 a 10 foo a 100 解析名稱時首先檢查區域性作用域,然後由內...

python中global和nonlocal的使用

global 在區域性訪問全域性中的內容 nonlocal 在區域性尋找外層函式中離他最近的那個變數 globals 檢視全域性中的內容 locals 檢視當前作用域中的內容 1 global的使用 全域性變數本身就是不安全的,不能隨意修改,可以使用閉包 a 10 deffunc return gl...

python中global與nonlocal比較

python引用變數的順序 當前作用域區域性變數 外層作用域變數 當前模組中的全域性變數 python內建變數 一 global global關鍵字用來在函式或其他區域性作用域中使用全域性變數。但是如果不修改全域性變數也可以不使用global關鍵字。複製 如下 gwww.cppcns.comcoun...