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