如何将python修饰符应用于函数?

如何将python修饰符应用于函数?,python,decorator,Python,Decorator,可能重复: 你能给出一个简短的代码示例来解释decorators吗 装饰器接受函数定义并创建一个新函数来执行该定义 函数并转换结果 @deco def do(): ... 相当于: do = deco(do) 例如: def deco(func): def inner(letter): return func(letter).upper() #upper return inner # return a function object #This

可能重复:


你能给出一个简短的代码示例来解释decorators吗

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

@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
def deco(func):
def内部(字母):
返回func(字母).upper()#upper
返回内部#返回函数对象
#这个
@德科
def do(编号):
将chr(编号)#编号返回至字母
#结束
#相当于这个
def do2(编号):
返回chr(编号)
do2=装饰(do2)
#结束
#65‘a’
印刷(do(65))
印刷品(do2(65))
>>>B
>>>B
为了理解decorator,需要注意的是,decorator创建了一个新函数do,它是执行func并转换结果的内部函数

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
这是我写的一篇教程: