Декораторы функций в Python
Декораторы функций - обеспечивают способ определять специальные режимы работы для функции, обертывая их дополнительным слоем логики, реализованной в виде других функций.
class A:
@staticmethod # декоратор в Python для создания статических методов
def summ(x,y):
return x+y
a = A.summ(6,7)
print a
# 13
class B: # альтернативная реализация класса А
def summ(x,y):
return x+y
summ = staticmethod(summ)
b = B.summ(6,7)
print b
# 13
class Counter: # класс как декоратор
def __init__(self, func): # принимаем в качестве параметра декорируемую функцию
self.func = func # запоминаем декорируемую функцию
self.calls = 0
def __call__(self, *args): # вызов декоратора, *args - аргументы декорируемой функции
self.calls += 1
if self.calls >= 3:
print "function summ call %s" % (self.calls,) # если функция summ была запущена 3 или больше раз
return self.func(*args)
@Counter
def summ(a,b,c):
return a+b+c
print summ(5,9,2)
print summ(1,7,2)
print summ(4,9,3)
# 16
# 10
# function summ call 3
# 16
# функция декорирующая другую функцию
def mydecorator(func): # функция принимающая декорируемую функцию
def wrapper(*args): # функция запускаемая при вызове декоратора и принимающая аргументы декорируемой функции
result = 1
for x in args: # цикл для подсчета произведения чисел декорируемой функции
result*=x
print "multiply = %s" % result
return func(*args) # запуск декорируемой функции
return wrapper
@mydecorator
def summ(a,b,c):
return a+b+c
print summ(5,9,3)
# multiply = 135
# 17
В Python существует возможность передачи параметров самому декоратору, но для этого придется создать еще один слой обертывания.
# decorator
def is_man(is_man=False):
def decorator(view):
def wrapper(*args, **kwargs):
print 'I man - ', is_man
return view(*args, **kwargs)
return wrapper
return decorator
@is_man(True)
def my():
pass
my()
# I man - True
Декораторы выполняются в порядке от внешнего к внутреннему. Последовательность выполнения в физическом мире напоминает разворачивание подарочной упаковки, слой за слоем...точно в такой последовательности выполняются декораторы.
# Последовательность выполнения соответствует числовому индексу
@decorator1
@decorator2
def main():
pass
Во время работы за компьютером нет ни одной минутки для просмотра по ТВ своей любимой передачи. Но, проблему легко решить, свои любимые радиоспектакли слушать онлайн теперь не составит труда.
- Игровой автомат Voodoo - на сайте Вулкан 24 казино играйте в самые щедрые слоты
- Создание функции Python
- Parimatch: игра на реальные деньги
- Вулкан официальный сайт - возможность заработать играя
- Модуль multiprocessing на примерах
- Игровой автомат Berryburst Max - на сайте казино Cлотозал выиграй крупно в аппараты NetEnt
- Первые шаги в wxPython [Урок №2]

