Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
def fact(n):
return n * fact(n-1) if n > 0 else 1
print fact(10)
fact = lambda self, n: n * self(self, n) if n > 0 else 1
print fact(fact, 10)
wrap = lambda fn, *args: fn(fn, *args)
fact = lambda self, n: n * self(self, n) if n > 0 else 1
print wrap(fact, 10)
y = lambda fn: lambda *args: fn(fn, *args)
fact = y(lambda self, n: n * self(self, n) if n > 0 else 1)
# применяем анонимную рекурсивную функцию
map(
(lambda fn: lambda *args: fn(fn, *args))(
lambda self, n: n * self(self, n-1) if n > 0 else 1),
[1,2,3]
)
Что в декораторах такого волшебного и непостижимого, заставляющего писать очередной пост про них?Для человека, издревле работающего с питоно-подобными языками ничего.
habrahabr.ru/post/74838/
habrahabr.ru/post/46306/
habrahabr.ru/post/86255/
habrahabr.ru/post/139866/
ими начинающие вряд ли со старта пользоваться будут, а если будут то еще быстрее запутаются
особенно полезен совет вложить декоратор в декоратор
Что мусолить одну тему по 10 раз?
def func(var):
print "I've got", var decorator(func)("10$") мы получим ожидаемое поведение. decorator(func) нам просто «некуда» передать аргумент (как пробрасывать аргументы через декоратор — в скором времени будет показано).# Возьмём функцию и запишем её в переменную
talk = getTalk()Теперь мы знаем, что функции являются полноправными объектами
А как завернуть декоратор, начинающийся с собаки @ в if ?
На сколько я понимамю, декоратор работает только без отступов от начала строки.
Спасибо автору за статью и за то, что она оказалась не такой длинной, как он обещал)
После того, как начались длинные названия функций, я перестал читать. Я, и так, больше люблю смотреть и слушать, а тут куча слов, да еще и на английском....
Понимаем декораторы в Python'e, шаг за шагом. Шаг 1