«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как правильно фиксировать переменные в лямбда-функциях в циклах?

Как правильно фиксировать переменные в лямбда-функциях в циклах?

Опубликовано 7 ноября 2024 г.
Просматривать:537

How to Properly Capture Variables in Lambda Functions in Loops?

Захват переменных в лямбда-функциях

При использовании лямбда-функций внутри цикла важно понимать область видимости их переменных. В отличие от обычных функций, копирующих локальные переменные, лямбда-функции ссылаются на них.

Рассмотрим данный код:

for m in ('do', 're', 'mi'):
    funcList.append(lambda: callback(m))

Здесь лямбда-функция фиксирует значение m из охватывающей области. Однако после завершения цикла m сохраняет последнее значение («mi»). Когда вызывается каждая лямбда-функция, она ссылается на эту общую переменную m, в результате чего на выходе несколько раз выводится «mi».

Чтобы решить эту проблему и гарантировать, что каждая лямбда-функция захватывает отдельное значение m, используйте метод под названием " аргументы по умолчанию":

for m in ('do', 're', 'mi'):
    funcList.append(lambda m=m: callback(m))

Сделав m параметром по умолчанию с тем же именем, каждая лямбда захватывает свой собственный экземпляр переменной, обеспечивая ожидаемый результат:

"до"
"пере"
"ми"

Заявление о выпуске Эта статья перепечатана по адресу: 1729329734. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3