2012-07-05 2 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 и преобразует resu л.

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 
Смежные вопросы