如何在Python高階閉包中得到最外層函式的環境變數?

時間 2021-06-09 23:19:43

1樓:「已登出」

……你不shadow不行嗎

shadowing的用意就是隱藏外層作用域的變數,你這「我要用同名變數隱藏掉外層,還要能有辦法訪問到外層」

這邏輯真的太矛盾了。

def fn1():

....a = 11

....def fn2():

........b = 22

........def fn3():

print(a)

........return fn3

....return fn2

a = 0

f2 = fn1()

f3 = f2()

f3()

完美解決

2樓:shuhari

反覆使用相同的變數名不是個好習慣,而且不太明白這個具體的應用場景是什麼。僅就問題而言,辦法很簡單,把要引用的外層變數通過介面暴露出來即可。

deffn1

():a=11

defget_a

():return

adef

fn2():a=

22def

fn3():

# global a

print

(get_a

())return

fn3return

fn2a=0

f2=fn1()f3=

f2()

f3()

3樓:DavyCloud

常規方法應該是不行了,根據語法,這裡fn2裡面的 a = 22 的後果就是覆蓋離它最近的巢狀名字空間(即 fn1 )裡面的同名變數;如果後續還有需要這個變數,那麼 fn2 函式有義務把這個變數儲存並傳遞下去。

硬上的話,用 inspect 模組應該是可以實現的,畢竟連原始碼都能獲取到。

Python 中如何同時 import 乙個包的兩個版本?

意群 續樓上,假設當前目錄為 zhangbin from a import c as a cfrom b import c as b c然後分別呼叫 a c.hello b c.hello IAMSK 比如 Users zhangbin a 和 Users zhangbin b 下各有乙個 lib ...

如何在未知的夢想中成為高階甜品師女孩?

螢火蟲旋風 我覺得放棄專業,轉型西點蠻靠譜的,但是也要分人。不過由於學到的蛋糕知識有限,開店又需要更加豐富的甜品知識。中間她自己還報了個班在上海王森名廚中心那邊,就是外教上課的那種,學了十幾天。回來之後,自己就開始學著研發一些新產品,每隔幾個月給店裡換產品這樣。聽說現在她的店面盈利比他老公工資都高。...

如何在python中,輸入乙個列表(n個1 3的矩陣),使x1 n1 x22 n22

王歡 既然是 的矩陣,完全可以用 numpy 來完成。而且,個人理解,在絕大多數情況下其實並不需要把矩陣中的每個元素都賦值對應到新的單個變數上。也就是說你的需求 可能並不一定很高效。import numpy asnp 從 python list 構建 n x 3 陣列 a np.array list...