Замыкание - это выполнение функции с той областью видимости, не в которой она вызывается, а в которой она определена.
Создаем функцию strip_string(chars)
которая принимает строчку,
и внутри функции определяем еще одну функцию inner_function(string)
которая тоже принимает строчку, из функции верх уровня мы возвращаем
функцию нижнего уровня, то есть ссылку на нее:
def strip_string(chars):
def inner_function(string:str):
return string.strip(chars)
return inner_function
x1 = strip_string('!')
print('Работа с замыканиями 1:', x1("!Hello World!"))
x2 = strip_string('!')
print('Работа с замыканиями 2:', x2("!Helorld!"))
# Вывод
# Работа с замыканиями 1: Hello World
# Работа с замыканиями 2: Helorld
В дальнейшем каждый раз вызывая ее мы будем получать ссылку на функцию нижнего уровня, и вызывая ее в работу она будет исполняться в контексте тех данных что были переданы в функцию верхнего уровня.
И каждый из экземпляров будет работать в своем контексте.