12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- from functools import wraps
- def text_decor(func):
- def wrapper(*args):
- print("Hello")
- func(*args)
- print("Goodbye!")
- return wrapper
- @text_decor
- def simple_func():
- print('I just simple python func')
- # simple_func()
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- def repeater(func):
- def wrapper(*args):
- func(*args)
- func(*args)
- return wrapper
- @repeater
- def multiply(num1, num2):
- print(num1 * num2)
- # multiply(2, 7) # после этого распечатается две строки со значением 14
- # multiply(5, 3) # после этого распечатается две строки со значением 15
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- def double_it(func):
- def wrapper(*args):
- return 2*func(*args)
- return wrapper
- @double_it
- def multiply(num1, num2):
- return num1 * num2
- # res = multiply(9, 4) # произведение 9*4=36, но декоратор double_it удваивает это значение
- # print(res)
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- def memoize(func):
- cache = {}
- @wraps(func)
- def wrapper(n):
- if n not in cache:
- cache[n] = func(n)
- return cache[n]
- return wrapper
- @memoize
- def fibonacci(n):
- """
- Возвращает n-ое число Фибоначчи
- """
- if n < 2:
- return n
- return fibonacci(n - 1) + fibonacci(n - 2)
- print(fibonacci(50))
- # assert fibonacci(50) == 12586269025
|