def outer_func(x):
def inner_func():
print(f"value: {x}")
print(f"value: {x}")
inner_func()
outer_func(0)
def outer_func(x):
def inner_func():
print(f"inner: {x}")
print(f"outer: {x}")
return inner_func
my_closure = outer_func(0)
my_closure()
def greeter(name):
def greet():
print(f"Привет, {name}!")
return greet
ivan_greeter = greeter("Ivan")
helen_greeter = greeter("Helen")
ivan_greeter()
helen_greeter()
'''
результат:
Привет, Ivan!
Привет, Helen!
'''
def greeter(name):
count = 0
def greet():
nonlocal count
count += 1
print(f"Привет, {name}! Я здоровался с Вами {count} раз")
return greet
ivan_greeter = greeter("Ivan")
helen_greeter = greeter("Helen")
ivan_greeter()
helen_greeter()
ivan_greeter()
ivan_greeter()
'''
результат:
Привет, Ivan! Я здоровался с Вами 1 раз
Привет, Helen! Я здоровался с Вами 1 раз
Привет, Ivan! Я здоровался с Вами 2 раз
Привет, Ivan! Я здоровался с Вами 3 раз
'''
def greeter(name):
summary_dict = {"name": name, "count": 0}
def greet():
summary_dict["count"] += 1
print(f"Привет, {summary_dict['name']}! Я здоровался с Вами {summary_dict['count']} раз.")
return greet
ivan_greeter = greeter("Ivan")
helen_greeter = greeter("Helen")
ivan_greeter()
helen_greeter()
ivan_greeter()
ivan_greeter()
'''
результат:
Привет, Ivan! Я здоровался с Вами 1 раз
Привет, Helen! Я здоровался с Вами 1 раз
Привет, Ivan! Я здоровался с Вами 2 раз
Привет, Ivan! Я здоровался с Вами 3 раз
'''
def call_counter(func):
call_count = 0
def call(*args, **kwargs):
nonlocal call_count
call_count += 1
print(f"Вызов {func.__name__}. Номер вызова: {call_count}.")
func(*args, **kwargs)
return call
def printer(msg):
print(msg)
call_printer = call_counter(printer)
call_printer("вызов 1")
call_printer("вызов 2")
'''
результат:
Вызов printer. Номер вызова: 1.
вызов 1
Вызов printer. Номер вызова: 2.
вызов 2
'''
def make_logger():
log_content = "Начало логгирования.\n"
def log(msg):
nonlocal log_content
log_content += msg + "\n"
return log_content
return log
logger = make_logger()
log_content = logger("Log X")
log_content = logger("Log Y")
print(log_content)
'''
результат:
Начало логгирования.
Log X
Log Y
'''