我先說一下官網的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...