-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclosure.py
43 lines (32 loc) · 1.71 KB
/
closure.py
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
33
34
35
36
37
38
39
40
41
42
43
'''
Замикання відбувається, коли внутрішня функція запам'ятовує стан свого оточення в момент свого створення і може використовувати ці змінні навіть після того, як зовнішня функція завершила своє виконання.
'''
def outer_function(msg):
message = msg
def inner_function():
print(message)
return inner_function
# Створення замикання
my_func = outer_function("Hello, world!")
my_func()
# Hello, world!
'''
Внутрішня функція має доступ до змінних, визначених у області видимості зовнішньої функції.
Зовнішня функція повертає внутрішню функцію як результат своєї роботи.
Після завершення роботи зовнішньої функції, внутрішня функція зберігає доступ до цих змінних, що відіграє важливу роль у певних програмних патернах та алгоритмах.
'''
from typing import Callable
def counter() -> Callable[[], int]:
count = 0
def increment() -> int:
# використовуємо nonlocal, щоб змінити змінну в замиканні
nonlocal count
count += 1
return count
return increment
# Створення лічильника
count_calls = counter()
# Виклики лічильника
print(count_calls()) # Виведе 1
print(count_calls()) # Виведе 2
print(count_calls()) # Виведе 3