我是一名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