python中global和nonlocal的使用
阿新 • • 發佈:2020-07-23
global: 在區域性訪問全域性中的內容
nonlocal: 在區域性尋找外層函式中離他最近的那個變數
globals() 檢視全域性中的內容
locals() 檢視當前作用域中的內容
1、global的使用:
# 全域性變數本身就是不安全的, 不能隨意修改, 可以使用閉包 a = 10 def func(): """ :return: global的作用: 1. 可以把全域性中的內容引入到函式內部 2. 在全域性建立一個變數 """ global a a += 10 print(a) func()print(a)
執行結果為:
20 20
2、nonlocal的使用:
def outer(): a = 10 # 在inner中改變a的值 def inner(): # 尋找外層函式中離他最近的那個變數 nonlocal a a = 20 print(a) print(a) inner() outer()
執行結果:
10 20
3、globals和locals的使用:
def fn(): a = 10 def gn(): b = 20 gn()print(locals()) fn() print(locals()) print(globals())
執行結果:
{'gn': <function fn.<locals>.gn at 0x0000012239A68C80>, 'a': 10} {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000012237DCB438>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/learnpj/oldboy/day11/global和nonlocal.py', '__cached__': None, 'i': 10, 'fn': <function fn at 0x0000012237D71E18>} {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000012237DCB438>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/learnpj/oldboy/day11/global和nonlocal.py', '__cached__': None, 'i': 10, 'fn': <function fn at 0x0000012237D71E18>}
練習題:
a = 1 def fun_1(): a = 2 def fun_2(): global a a = 3 def fun_3(): a = 4 print(a) print(a) fun_3() print(a) print(a) fun_2() print(a) print(a) fun_1() print(a)
a = 1 def fun_1(): a = 2 def fun_2(): nonlocal a a = 3 def fun_3(): a = 4 print(a) print(a) fun_3() print(a) print(a) fun_2() print(a) print(a) fun_1() print(a)
以上兩道練習題的輸出結果分別是什麼,請自行理解並輸出一下!