本文實例分析了Python作用域用法。分享給大家供大家參考,具體如下:
每一個程式語言都有變數的作用域的概念,Python也不例外,以下是Python作用域的程式碼示範:
def scope_test(): def do_local(): spam = "local spam" def do_nonlocal(): nonlocal spam spam = "nonlocal spam" def do_global(): global spam spam = "global spam" spam = "test spam" do_local() print("After local assignment:", spam) do_nonlocal() print("After nonlocal assignment:", spam) do_global() print("After global assignment:", spam) scope_test() print("In global scope:", spam)
程式的輸出結果:
After local assignment: test spam After nonlocal assignment: nonlocal spam After global assignment: nonlocal spam In global scope: global spam
注意:local 賦值語句是無法改變scope_test 的spam綁定。 nonlocal 賦值語句改變了 scope_test 的 spam 綁定,而 global 賦值語句從模組級改變了 spam 綁定。
其中,nonlocal是Python 3新增的關鍵字。
你也可以看到在 global 賦值語句之前對 spam 是沒有預先綁定的。
小結:
遇到在程式中存取全域變數並且要修改全域變數的值的情況可以使用:global關鍵字,在函數中宣告此變量是全域變數
nonlocal關鍵字用來在函數或其他作用域中使用外層(非全域)變數。
global關鍵字很好理解,其他語言大體也是如此。這裡再舉一個nonlocal的例子:
def make_counter(): count = 0 def counter(): nonlocal count count += 1 return count return counter def make_counter_test(): mc = make_counter() print(mc()) print(mc()) print(mc())
運行結果:
1 2 3