Пространство имен

1. Что такое пространство имён

  • Пространство имён — это контейнер, который сопоставляет имена переменных с объектами (значениями).

  • Оно отвечает за видимость и область действия переменных.

В Python есть несколько уровней пространства имён:

Уровень
Где находится
Пример поиска

Local (локальное)

Внутри функции или метода

Переменные внутри функции

Enclosing (вложенное)

Внутри внешней функции (если есть вложенные функции)

Замыкания (closures)

Global (глобальное)

На уровне модуля

Переменные в файле Python

Built-in (встроенное)

Встроенные функции и объекты Python (len, print)

Python standard library


2. Пример

x = "глобальная переменная"

def outer():
    x = "внешняя переменная"
    def inner():
        x = "локальная переменная"
        print(x)  # ищет сначала локальное пространство
    inner()
    print(x)  # внешнее пространство
outer()
print(x)      # глобальное пространство

Вывод:

локальная переменная
внешняя переменная
глобальная переменная

3. Ключевые моменты

  1. global — позволяет использовать и изменять глобальную переменную внутри функции:

x = 5
def modify_global():
    global x
    x += 1
modify_global()
print(x)  # 6
  1. nonlocal — позволяет изменять переменную из внешней функции:

def outer():
    x = 10
    def inner():
        nonlocal x
        x += 5
    inner()
    print(x)  # 15
outer()

4. Применение в автотестах

  • Фикстуры и конфигурации тестов — глобальные переменные или параметры модуля.

  • Локальные переменные в функциях теста — чтобы не влиять на другие тесты.

  • Избежание конфликтов имён — важно в больших проектах, когда много тестовых модулей.

CONFIG = {"url": "https://example.com"}  # глобальное пространство

def test_login():
    username = "user1"  # локальное пространство
    password = "123"
    assert login(CONFIG["url"], username, password)

💡 Вывод:

  • Пространства имён — это способ управлять видимостью переменных.

  • Python использует LEGB-последовательность для поиска значения переменной.

  • global и nonlocal позволяют явно управлять областями видимости.

Last updated

Was this helpful?