2012-07-05 106 views

回答

0

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

@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 

要了解装饰,但要注意的是重要的,那装饰创造了一个新的功能这是内部执行func并转换结果LT。

5
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 
相关问题