標籤:tin UI ... color 結果 pytho 傳回值 family font
命名空間(name space),若變數x=1,1存放在記憶體中,命名空間是存放名字x、x與1綁定關係的地方。
命名空間分三種:
- locals:函數內的名稱空間,包括局部變數和形參
- globals:全域變數,函數定義所在模組的名字空間
- builtins:內建模組的名字空間 dir(__builtins__)查看所有內建方法
範圍:python中一個函數就是一個範圍,局部變數放置在其範圍中;代碼定義完成後,範圍已經完成,範圍鏈向上尋找
C# Java中範圍{}
不同變數的範圍不同就是由這個變數所在的命名空間決定的:
範圍即範圍:
全域範圍:全域存活,全域有效
局部範圍:臨時存活,局部有效
LEGB:locals ——>enclosing(相鄰的上一級) ——>globals ——> __builtins__
- locals 是函數內的名字空間,包括局部變數和形參
- enclosing 外部嵌套函數的名字空間
- globals 全域變數,函數定義所在模組的名字空間
- builtins 內建模組的名字空間
n = 10def fun1(): n = 20 print(‘func1‘,n) def fun2(): n = 30 print(‘func2‘,n) def func3(): print("func3",n) # locals沒有,先找相鄰上一級範圍 func3() # 20 fun2() # 30 fun1() # 30
def func(): level = ‘L1‘ n = 33 print(locals()) # {‘level‘: ‘L1‘, ‘n‘: 33} def outer(): n = 44 level = ‘L2‘ print(locals(), n) def inner(): level = ‘L3‘ print(locals(), n) inner() # {‘n‘: 44, ‘level‘: ‘L3‘} 44 outer() # {‘n‘: 44, ‘level‘: ‘L2‘} 44func()
age = 18def func1(): age = 73 def func2(): age = 84 print(age) return 666val = func1()print(val)‘‘‘輸出:666‘‘‘# 函數名可以當作傳回值age = 18def func1(): age = 73 def func2():... return func2 # 返回一個函數名# val = func1()print(val)‘‘‘輸出:<function func1.<locals>.func2 at 0x101462598>‘‘‘# 代碼寫完之後範圍已經產生,不管函數名傳到哪裡,只要執行都回回定義的地方往上找age = 18def func1(): age = 73 def func2(): print(age) return func2 # 返回一個函數名不帶括弧val = func1()val()‘‘‘輸出結果:73‘‘‘
globals(),locals()
python函數名稱空間