Python просто | з Коропом
Фотографія
натисніть — покажемо
натисніть — покажемо
Фотографія
натисніть — покажемо
натисніть — покажемо
❗️Уникайте створення функцій в циклах
Про що я таке говорю?) 🙃
▫️У Пайтоні кожна функція та клас мають свою область видимості (скоуп), і відповідно — локальні змінні
▫️Коли створюється функція всередині будь-якого блоку, вона запам'ятовує скоуп, в якому вона була створена
▫️При виклику, функція може використовувати як і локальні змінні, так і змінні вищого скоупа
▫️Цикли не мають свого скоупа
Це означає, що значення, яке змінюється в циклі, змінюється в скоупі, де існує цикл
▫️Якщо створити функцію всередині циклу, то той скоуп, який збереже функція для подальшого використання буде тим самий скоупом, який змінюється в циклі
Що відбувається в прикладі:
▫️Після завершення циклу значення змінної number рівне 2
▫️При виклику, функція callback дивиться в скоуп по змінну number і знаходить там 2
▫️У результаті виводиться 3 двійки підряд 🙈 😢
Як це виправити?
▫️Спробуйте порефакторити код так, щоб функції не створювались в циклі
▫️Або ж спробуйте використати functools.partial
Тут можливо прийдеться додати аргументи до функції, які будуть передаватись через partial, а раніше брались напряму зі скоупу
Спробувати самостійно | Підписатись
2 · 1.1K ·