Python装饰器参数值未更新
因此,我正在编写一个遵循相同逻辑的代码示例。 执行此代码时,我得到一个错误:Python装饰器参数值未更新,python,python-2.7,python-decorators,Python,Python 2.7,Python Decorators,因此,我正在编写一个遵循相同逻辑的代码示例。 执行此代码时,我得到一个错误: UnboundLocalError:赋值前引用的局部变量“footer” 调试后,我发现如果尝试更新footer的值,它会抛出一个错误,因为它是一个decorator参数 因此,下面给出的两个代码示例起作用 from functools import wraps def panel(title=None, footer=None): def decorator(func): @wraps(fu
UnboundLocalError:赋值前引用的局部变量“footer”
调试后,我发现如果尝试更新footer
的值,它会抛出一个错误,因为它是一个decorator参数
因此,下面给出的两个代码示例起作用
from functools import wraps
def panel(title=None, footer=None):
def decorator(func):
@wraps(func)
def inner(*args, **kwargs):
heading = ''
if title:
heading = title
if footer:
footer = footer + '\n'
return heading + footer
return inner
return decorator
@panel(title='Hello', footer='World')
def hello_foo():
print 'Executing'
hello_foo()
在上面的示例中,我只是打印footer的值,没有执行任何更新操作
def panel(title=None, footer=None):
def decorator(func):
@wraps(func)
def inner(*args, **kwargs):
heading = ''
if title:
heading = title
if footer:
print footer
print heading + footer
return inner
return decorator
在这里,我将decorator参数从footer
更改为footer\t
我的问题是,当我尝试更新decorator参数时,错误背后可能的原因是什么?谢谢你的回答谢谢你的回答
def panel(title=None, footer_t=None):
def decorator(func):
@wraps(func)
def inner(*args, **kwargs):
heading = ''
footer = ''
if title:
heading = title
if footer_t:
footer = footer_t + '\n'
return heading + footer
return inner
return decorator