Python

Учебник Python Closures

Учебник Python Closures
Замыкание - это вложенный внутренний метод или функция, которая распознает и имеет право использовать переменные даже после того, как внешняя функция завершила выполнение в локальной области, в которой она была создана. Переменная должна быть из внешней функции или области видимости и не обязательно ограничена в локальном пространстве для использования. Замыкание Python имеет три особенности, а именно:

Вложенная функция

Сначала вы должны понять, что такое вложенный метод. Вложенная функция может быть определена как метод, указанный в другом методе. Рекурсивные функции могут достигать переменных внешней области видимости. Чтобы изменить нелокальные переменные, мы специально определяем их как нелокальные с помощью нелокальных ключевых слов, потому что они по своей природе предназначены только для чтения. Итак, сначала взгляните на вложенную функцию, выполняемую в Spyder Python 3.

Мы определили две функции: внешнюю и внутреннюю. Во внешней функции мы объявили переменную с некоторым текстовым значением в ней.

def external_func ()
msg = 'Hy! Я Акса Ясин

Эта переменная была напечатана во внутренней функции с помощью оператора печати. Затем возвращается внутренняя функция, которая является вложенной функцией, и после этого была вызвана внешняя функция.

def inner_func ()
печать (сообщение)
вернуть inner_func ()
inner_func ()

Если вы не используете ключевое слово return для возврата внутренней функции, она все равно вернет тот же результат.

Когда вы запустите этот простой код, он вернет вам текст, определенный как значение в переменной "сообщение".

Выход: Hy! Я Акса Ясин

Теперь определите тот же тип вложенной функции без ключевого слова return и передаваемой переменной "сообщение" в параметре, и вы получите тот же результат.

Выход: Здравствуйте

Простая функция закрытия

Используйте тот же код с небольшими изменениями в последних двух строках. Со строкой 'Привет', в show_msg () был вызван метод, и возвращенный метод был привязан к слову 'Другой'. Во время звонка Другой(), текст 'Привет' все еще вспоминали, в то время как show_msg () метод уже был запущен. Обязательно добавьте переменную "сообщение" во внешней функции.

Когда вы запустите этот код, он покажет, что внутренняя функция, которая является показывать(), был присвоен переменной 'Другой'.

Выход: .показать в 0x0000020CCED4D820>

Вы можете просто распечатать название функции, присвоенной переменной 'Другой' в виде:

печать (другой.__название__)

Он выведет имя функции.

Выход: показать

Теперь, если вы хотите выполнить эту переменную как функцию, как и другие методы, вы можете сделать это, добавив круглые скобки и вызвав ее следующим образом:

другой = show_msg ("Привет")
Другой()
Другой()

Вы можете вызывать это столько раз, сколько хотите.

Когда вы запустите этот код, он отобразит что-то вроде этого:

Выход:

Привет

Привет

Привет

Теперь вы можете видеть, что даже после завершения выполнения внешней функции внутренняя функция все еще запоминает переменные и другие вещи, которые были созданы или определены в локальном пространстве.

Функция закрытия с использованием параметров

Теперь мы добавили параметры при передаче переменной во внешней функции как:

def show_msg (сообщение)

Значение, переданное во внешний параметр функции, будет присвоено переменной, определенной внутри этой внешней функции как:

Сообщение = сообщение

Передайте некоторые строковые значения во вновь созданных переменных в последней строке, как:

func1 = show_msg ('Привет')
func2 = show_msg ('Привет')

Теперь вам нужно вызвать эти функции следующим образом:

func1 ()
func2 ()

Вы получите следующий результат, показанный на изображении редактора Spyder:

В Python этот процесс, посредством которого любые данные (Hi или Hello для этого сценария) прикрепляются к скрипту, называется Closure.

Простое умножение с использованием Python Closure

Мы определили две функции. Один внешний, для которого определен множитель, и внутренний, в котором значение будет передано при вызове функции. Во внешней функции мы объявили переменную с переданным в нее определенным значением множителя. Это значение множителя 'п' был умножен на некоторую ценность 'Икс' который передается в операторе печати внутренней функции. Затем возвращается внутренняя функция, которая является вложенной функцией, и после этого переменные вызываются одна за другой в операторах печати.

def out_multiply (n):
def in_multiply (x):
вернуть x * n
вернуть in_multiply

Теперь новой переменной присвоено какое-то значение, которое нужно передать в параметре внешней функции. Это значение будет сохранено в переменной 'п', который является множителем, определенным во внешней функции:

times3 = out_multiply (3)
times5 = out_multiply (5)

Этим переменным будет присвоено больше значений, которые будут сохранены в 'Икс' переменная, определенная во внутренней функции, которую нужно умножить на множитель 'п'. Когда мы печатаем переменную с именем times, функция с некоторым целочисленным значением 'Икс' назначенный в круглых скобках заставит его умножить на внешнее значение функции 'п'.

Первый будет вывод 27 при выполнении оператора печати, потому что переменная 'п' имеет 3 как множитель, и мы дали 9 как другое целое число для умножения.

печать (times3 (9))

Второй будет вывод 15 при выполнении оператора печати, потому что переменная 'п' имеет 3 как множитель, и мы дали 5 как другое целое число для умножения.

печать (times5 (3))

Последний будет выход 30 при запуске оператора печати, потому что он рекурсивно вызывает время для переменной функции. В первый раз раз 'п' имея 3 как множитель, который будет умножен на целое число 2. При умножении он выведет 6. Теперь это 6 будет использоваться как значение, а затем передано в качестве аргумента функции переменной times, где 'п' переменный множитель 5. Так когда 5 умножается на 6 он будет выводить 30.

печать (раз5 (раз3 (2)))

Вы можете увидеть результат в консоли редактора Spyder.

Заключение

Замыкания могут запрещать использование глобальных значений и иметь форму сокрытия данных. Он также может обеспечить объектно-ориентированный подход к проблеме. Надеюсь, после этого руководства вы сможете получить основы закрытия Python.

5 лучших эргономичных компьютерных мышей для Linux
Вызывает ли длительное использование компьютера боль в запястье или пальцах?? Вы страдаете от скованности суставов и постоянно должны пожимать руки? В...
Как изменить настройки мыши и сенсорной панели с помощью Xinput в Linux
Большинство дистрибутивов Linux по умолчанию поставляются с библиотекой libinput для обработки событий ввода в системе. Он может обрабатывать события ...
Переназначьте кнопки мыши по-разному для разных программ с помощью X-Mouse Button Control
Может быть, вам нужен инструмент, который мог бы изменять управление вашей мышью с каждым приложением, которое вы используете. В этом случае вы можете...