123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- from datetime import datetime
- from time import perf_counter, sleep
- def multiply(value):
- def inner(x):
- return value*x
- return inner
- def make_repeater(n):
- def inner(str):
- return(str*n)
- return inner
- '''
- def create_accumulator():
- s = 0
- def inner(x):
- nonlocal s
- s += x
- return s
- return inner
- '''
-
- def create_accumulator(start_value=0):
- s = start_value
- def inner(x):
- nonlocal s
- s += x
- return s
- return inner
- def countdown(x):
- counter = start = x
- def inner():
- nonlocal counter
- if counter <= 0:
- print(f"Превышен лимит, вы вызвали более {start} раз")
- else:
- print(counter)
- counter -= 1
- return inner
- def count_calls():
- counter = 0
- def inner():
- inner.total_calls += 1
- return inner.total_calls
- setattr(inner, 'total_calls', 0)
- return inner
- def counter(func):
- '''Выводит имя и количество вызовов функции'''
- count = 0
- def inner(*args, **kwargs):
- nonlocal count
- count += 1
- print(f'Функция {func.__name__} вызывалась {count} раз')
- return func(*args, **kwargs)
- return inner
- def timer():
- '''Сколько времени прошло с момента создания замыкания'''
- start = perf_counter()
- def inner():
- return perf_counter() - start
- return inner
- def create_dict():
- key = 1
- dct = {}
- def inner(value):
- nonlocal key
- dct[key] = value
- key += 1
- return dct
- return inner
- def my_func(a):
- def inner(x):
- return x - a
- return inner
- def main():
- f_1 = create_dict()
- print(f_1('privet'))
- print(f_1('poka'))
- print(f_1([5, 2, 3]))
- f2 = create_dict()
- print(f2(5))
- print(f2(15))
- # x = my_func(10)
- # print(x(5))
- # f_2 = multiply(2)
- # print(f_2(5))
- # print(f_2(15))
- # repeat_2 = make_repeater(2)
- # print(repeat_2('Pizza'))
- # print(repeat_2('Pasta'))
- # summator_1 = create_accumulator()
- # print(summator_1(1)) # печатает 1
- # print(summator_1(5)) # печатает 6
- # print(summator_1(2)) # печатает 8
- # summator_2 = create_accumulator()
- # print(summator_2(3)) # печатает 3
- # print(summator_2(4)) # печатает 7
- # summator_1 = create_accumulator(100)
- # print(summator_1(1)) # печатает 101
- # print(summator_1(5)) # печатает 106
- # print(summator_1(2)) # печатает 108
- # counter = count_calls()
- # counter()
- # counter()
- # print(counter.total_calls)
- # counter()
- # print(counter.total_calls)
- if __name__ == '__main__':
- main()
|