четверг, 16 мая 2013 г.

Декораторы в python

Взгляните на этот чудо-код с декоратором @amazed:
def amazed(func):
    def wrap():
        return func() + 'aaa!'

    return wrap

@amazed  
def hey():
    return 'hey'

print hey() # 'heyaaa!'
Эта запись позволяет заменить следующий код:
def amazed(func):
    # определяем функцию-обертку
    def wrap():
        # выполняем переданную функцию - func(). 
        # К результату подсоединяем строку 'aaa!'
        return func() + 'aaa!'
    # возвращаем объект функции wrap
    return wrap
    
def hey():
    return 'hey'
  
hey = amazed(hey)   

print hey()
Таким образом, декоратор @amazed позволил нам, не тронув кода функции hey(), изменить ее поведение и сделать так, чтобы к слову 'hey' добавлялась строка 'aaa!'

Комментариев нет:

Отправить комментарий