-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path19_closure_tutorial.py
More file actions
32 lines (25 loc) · 1.06 KB
/
19_closure_tutorial.py
File metadata and controls
32 lines (25 loc) · 1.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
def make_counter():
# Эта переменная находится во внешней функции
count = 0
# Внутренняя функция
def counter():
# nonlocal позволяет изменять переменную из внешней области видимости
nonlocal count
count += 1
return count
# Возвращаем саму функцию, а не результат её вызова
return counter
# Создаем два независимых счетчика
counter_a = make_counter()
counter_b = make_counter()
print("Счетчик А:", counter_a()) # 1
print("Счетчик А:", counter_a()) # 2
print("Счетчик Б:", counter_b()) # 1 (у него свое состояние)
print("Счетчик А:", counter_a()) # 3
# Еще один пример: умножитель
def make_multiplier(n):
return lambda x: x * n
double = make_multiplier(2)
triple = make_multiplier(3)
print(f"2 * 5 = {double(5)}") # 10
print(f"3 * 5 = {triple(5)}") # 15