• Типы областей видимости:
    • Локальная (Local, L): Внутри текущей функции или блока. Переменные, созданные здесь, доступны только внутри.
      def my_func():
          a = 10 # Локальная переменная
          print(a) 
    • Объемлющая (Enclosing function locals, E): Локальная область видимости для вложенных функций. Позволяет внутренней функции видеть переменные внешней функции.
      def outer_function():
          x = "внешняя" # Переменная объемлющей области для inner_function
          def inner_function():
              print(x) # Доступ к x из объемлющей области
          inner_function()
    • Глобальная (Global, G): На верхнем уровне модуля (файла .py). Переменные, определенные здесь, доступны из любого места модуля.
      global_var = "Я глобальная"
       
      def some_func():
          print(global_var) # Доступ к глобальной переменной
    • Встроенная (Built-in, B): Содержит имена, встроенные в Python (len, print, int, True, None, исключения и т.д.). Всегда доступна.
      • Посмотреть имена: print(dir(__builtins__))
  • Изменение переменных:
    • global: Ключевое слово используется внутри функции, чтобы указать, что присваивание значения должно изменить глобальную переменную, а не создавать новую локальную.
      s = "Глобальное значение"
      def change_global():
          global s # Указываем, что работаем с глобальной s
          s = "Измененное значение"     
          print("Внутри функции:", s)
       
      change_global()  
      print("Снаружи функции:", s) 
      # Вывод:
      # Внутри функции: Измененное значение
      # Снаружи функции: Измененное значение
    • nonlocal: Ключевое слово используется во вложенной функции, чтобы указать, что присваивание значения должно изменить переменную в объемлющей (не глобальной!) области видимости.
      def outer():
          x = 5
          def inner():
              nonlocal x # Указываем, что работаем с x из outer
              x += 1
              print('Внутри inner_function:', x)
          inner()
          print('Внутри outer_function:', x)
      outer()
      # Вывод:
      # Внутри inner_function: 6
      # Внутри outer_function: 6
    • Правило LEGB (GLEB): Порядок поиска имен Python: Local Enclosing Global Built-in. Python ищет имя по этому пути и использует первое найденное совпадение.

〰〰〰 𓆝 𓆟 𓆞 𓆝 𓆟 𓆝 𓆟 𓆞 〰〰〰