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()
所以,我正在研究一个遵循相同逻辑的代码示例。 执行此代码时出现错误:
UnboundLocalError: local variable 'footer' referenced before assignment
调试后,我发现如果尝试更新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
在上面的示例中,我只是打印页脚的值而不进行任何更新操作
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
在这里,我将装饰器参数从footer
更改为footer_t
。
我的问题是,当我尝试更新装饰器参数时,错误背后的原因可能是什么?