Python装饰器参数值未更新

时间:2016-04-20 08:06:17

标签: python python-2.7 python-decorators

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

我的问题是,当我尝试更新装饰器参数时,错误背后的原因可能是什么?

0 个答案:

没有答案