【问题标题】:How to apply a python decorator to a function? [duplicate]如何将 python 装饰器应用于函数? [复制]
【发布时间】:2012-07-05 18:08:18
【问题描述】:

可能重复:
Understanding Python decorators

您能否给出一个解释装饰器的简短代码示例?

【问题讨论】:

标签: python decorator


【解决方案1】:
def spam(func):
    def wrapped(*args, **kwargs):
        print "SPAM"
        return func(*args, **kwargs)
    return wrapped

@spam #this is the same as doing eggs = spam(eggs)
def eggs():
    print "Eggs?"

请注意,您也可以使用类来编写装饰器

class Spam(object):
    def __init__(self, func):
        self.func = func

    def __repr__(self):
        return repr(self.func)

    def __call__(self, *args, **kwargs):
        print "SPAM"
        return self.func(*args, **kwargs)

@Spam
def something():
    pass

【讨论】:

    【解决方案2】:

    装饰器接受函数定义并创建一个执行此函数的新函数 函数并转换结果。

    @deco
    def do():
        ...
    

    相当于:

    do = deco(do)
    

    例子:

    def deco(func):
        def inner(letter):
            return func(letter).upper()  #upper
        return inner  # return a function object
    
    #This
    @deco
    def do(number):
        return chr(number)  # number to letter
    #end
    
    # is equivalent to this
    def do2(number):
        return chr(number)
    
    do2 = deco(do2)
    #end
    
    
    # 65 <=> 'a'
    print(do(65))
    print(do2(65))
    >>> B
    >>> B
    

    要理解装饰器,重要的是要注意,装饰器创建了一个新函数do,它是inner,它执行func并转换结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-25
      • 2015-02-01
      • 2017-04-20
      • 2019-07-29
      • 2014-11-07
      • 2011-05-06
      • 2015-08-14
      相关资源
      最近更新 更多