Добрый день! Это мой первый перевод на хабре. Я программирую ради удовольствия и эта статья (на самом деле это ответ с stackoverflow) показалась мне достойной внимания. Во-первых — она огромна. Во-вторых, она прекрасна. Она помогла лично мне и я надеюсь, что кому-нибудь (например, таким же новичкам как и я) она также окажет содействие и утолит любопытство.
Все, что находится в таких "[..]" скобках — это мои комментарии. Все остальное — это мой перевод. Отчасти адаптированный, отчасти нет. Надеюсь, что он не очень плох и если всеже плох, рассчитываю на ваше понимание.
Поехали!
Python: Функции как объекты
Что бы понять что такое декораторы, для начала вы должны понять, что функции в python — это объекты. Данное понимание очень важно. Давайте разберем это на простом примере:
def shout(word="yes"):
return word.capitalize()+"!"
print shout()
# результат: 'Yes!'
# Так как фунция - объект, вы можете присвоить её переменной, как любой другой объект.
scream = shout
# Отметьте, что мы не используем скобки: мы не вызываем функцию, мы
# помещаем функцию "shout" в переменную "scream".
# это значит, что вы можете вызвать функцию "shout" из переменной "scream":
print scream()
# результат: 'Yes!'
# Более того, это значит, что вы можете удалить старое наименование 'shout', и
# функция при этом будет все еще доступна из переменной 'scream'
del shout
try:
print shout()
except NameError, e:
print e
#результат: "name 'shout' is not defined"
print scream()
# результат: 'Yes!'
Читать полностью »