我是一名Python初學者,在聲明裝飾器時遇到了這個問題。我不知道該怎麼稱呼這個特定場景,所以我無法有效地谷歌它。包裝函數爲什麼調用自己而不是傳遞給裝飾器函數的original_function?
的情況是,我宣佈2個裝飾功能,decorating_function1和decorating_function2,並將它們添加到我的命名original_function功能。當我執行original_function時,它進入了無限遞歸。調試後,我發現decorating_function2的包裝函數正在調用它自己,而不是傳遞給decorating_function2的original_function。此外,當我直接在Python解釋器上試用此代碼時,它運行時沒有任何問題。 (我無法在翻譯中複製這個場景)
所以,我的問題是,是否有一個特定的情況可能導致這種行爲?
我正在嘗試做的代碼片段。下面的代碼運行正確:
def decorating_function1(original_function):
print(original_function.__name__)
def wrapper(*vargs,**kwargs):
print('inside wrapper of df1')
return original_function(*vargs,**kwargs)
return wrapper
def decorating_function2(original_function):
print(original_function.__name__)
def wrapper(*vargs,**kwargs):
print('inside wrapper of df2')
return original_function(*vargs,**kwargs)
return wrapper
@decorating_function2
@decorating_function1
def original_function(name,age):
print("Name of the person is %s and his age is %d" % (name,age))
謝謝,我得到了函數調用順序。我想知道的是,decorating_function2的包裝器什麼時候可以調用它自己,而不是傳遞給decorating_function2的original_function。重新編寫代碼片段後,我無法再現該場景。 – sidmishraw
很難回答,沒有看到你以前的代碼。 – Pythonista