Курс Python → Мощь вложенных функций в Python

В Python вложенные функции могут быть мощным инструментом для организации кода и повышения его читаемости. Когда функция определена внутри другой функции, она может использовать переменные из области видимости внешней функции. Эти переменные образуют замыкание (closure), что позволяет сохранять состояние функции между вызовами.

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

def outer_function():
    x = 10
    
    def inner_function():
        nonlocal x
        x += 5
        print(x)
        
    inner_function()
    
outer_function()

В этом примере мы объявляем переменную x во внешней функции outer_function и изменяем ее значение во вложенной функции inner_function с помощью nonlocal. При вызове outer_function будет напечатано значение 15, так как x было увеличено на 5.

Использование nonlocal позволяет нам более гибко управлять переменными во вложенных функциях, делая код более понятным и поддерживаемым. Однако, следует помнить, что избыточное использование nonlocal может привести к сложностям в понимании кода, поэтому его следует использовать с умом.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Функция zip() в Python
  2. Функция all() в Python
  3. Компиляция регулярных выражений
  4. Печать календаря в Python
  5. Оболочка Python
  6. Возвращение нескольких значений
  7. Просмотр атрибутов и методов класса
  8. Метод get() в Python
  9. Освобождение памяти в Python
  10. Модуль subprocess: запуск внешних команд
  11. Метод hash в Python
  12. Метод Enumerate() для списков
  13. Удаление falsy-значений из списка с помощью filter
  14. Создание треугольника Паскаля
  15. Официальный канал Python в Telegram
  16. Лямбда-функции в цикле
  17. capitalize() — изменение регистра первого символа строки
  18. Фильтрация входных данных в Python
  19. Асинхронное выполнение задач в процессах
  20. Замер времени выполнения кода
  21. Модуль math: константы π и e
  22. Настройка нарезки списков
  23. Замена атрибута в именованном кортеже
  24. Очистка данных с помощью pandas
  25. Асинхронное программирование с asyncio
  26. Функция enumerate() — Python
  27. Отношения подклассов в Python
  28. Defaultdict в Python
  29. Проверка окончания строки с помощью str.endswith()
  30. Поиск кода
  31. Операции с датами в Python
  32. Объединение словарей в Python
  33. Генераторы по генератору
  34. Работа с Telegram API на Python
  35. Конвертация текстовых чисел с помощью Numerizer
  36. Дизассемблирование Python кода
  37. Визуализация пропусков данных
  38. Поиск с помощью регулярных выражений
  39. Определение относительного пути
  40. Добавление элементов в список: append() vs extend()
  41. Перевод текста с Python Translator
  42. Howdoi — получение ответов из терминала
  43. Метод rmatmul для пользовательских матриц
  44. Работа с временем в Python
  45. Проблема сравнения словарей

Marketello читают маркетологи из крутых компаний