弄得我有一些測試代碼:蟒蛇,在裝修和關閉
def num(num): def deco(func): def wrap(*args, **kwargs): inputed_num = num return func(*args, **kwargs) return wrap return deco @num(5) def test(a): return a + inputed_num print test(1)
當運行這段代碼,我得到了一個錯誤顯示,「inputed_num」不是定義
我的問題是: 在包裝函數中,是否沒有func可以得到'inputed_num'的閉包?
無論如何,如果不是,我該怎麼做才能得到我的目標:初始化某個值,並直接在主函數中使用該值。
認爲。
只是因爲該函數定義並不一定意味着它是爲時已晚後的裝飾應用。直到函數被實際調用時纔會引發錯誤,並且由於它是被調用的函數,因此它可以操作全局變量,以在調用原函數時改變原函數的行爲。 – BrenBarn
OP沒有要求一個全局變量 - 這會有它自己的問題(特別是,如果他多次使用裝飾器)。相反,他想要一個閉包(a.k.a是一個單元變量)。 Python的語義要求在最初定義* test()*的時候靜態引用單元變量(詞彙範圍)。之後運行裝飾器時,創建單元變量實在太晚了。 –
認爲。在閱讀您的文章後,我明白了我的錯誤。 **但是**我不想做一些主要功能的修改 – Yueyoum