Gernar
JavaScript: язык и типы

Что такое область видимости

Разбор вопроса «Что такое область видимости» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.

Вопрос

Что такое область видимости

Профессия

Frontend Developer

Что хочет услышать интервьюер

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

Ключевые тезисы

  • Область видимости (scope) определяет, где переменная или функция доступна в коде. В Python есть локальная, глобальная и встроенная (built-in) области видимости.
  • Локальная область видимости ограничена функцией или блоком кода, где переменная объявлена. Глобальная — доступна во всем модуле, а встроенная содержит ключевые слова и функции Python (например, print()).
  • Ключевое слово global позволяет изменять глобальные переменные внутри функции, а nonlocal — работать с переменными из внешней (но не глобальной) области видимости.

Подробный ответ

Область видимости (scope) — это концепция, которая определяет, где и как переменные или функции могут быть доступны в коде. В Python существует три основных типа областей видимости: локальная, глобальная и встроенная (built-in). Локальная область видимости ограничена функцией или блоком кода, где переменная объявлена. Это означает, что такая переменная доступна только внутри этой функции или блока. Глобальная область видимости охватывает весь модуль, и переменные, объявленные на этом уровне, доступны из любой части кода в этом модуле. Встроенная область видимости содержит ключевые слова и функции Python, такие как print(), len(), и другие, которые доступны в любом месте программы без необходимости их объявления. Для работы с переменными из разных областей видимости используются ключевые слова global и nonlocal. Ключевое слово global позволяет изменять глобальные переменные внутри функции, а nonlocal используется для работы с переменными из внешней (но не глобальной) области видимости, например, из вложенной функции.

Практические примеры

Пример 1

Пример локальной переменной:

def my_function():
    x = 10  # Локальная переменная
    print(x)
my_function()  # Выведет 10
print(x)  # Ошибка: переменная x не определена

Пример 2

Пример глобальной переменной:

x = 10  # Глобальная переменная
def my_function():
    print(x)  # Доступ к глобальной переменной
my_function()  # Выведет 10

Пример 3

Пример использования global:

x = 10  # Глобальная переменная
def my_function():
    global x
    x = 20  # Изменение глобальной переменной
my_function()
print(x)  # Выведет 20

Пример 4

Пример использования nonlocal:

def outer_function():
    x = 10  # Переменная внешней функции
    def inner_function():
        nonlocal x
        x = 20  # Изменение переменной внешней функции
    inner_function()
    print(x)  # Выведет 20
outer_function()

Частые ошибки

  • Попытка использовать переменную до ее объявления в локальной области видимости:
def my_function():
    print(x)  # Ошибка: переменная x не определена
    x = 10
my_function()
  • Путаница между global и nonlocal. Например, использование global вместо nonlocal во вложенных функциях:
def outer_function():
    x = 10
    def inner_function():
        global x  # Ошибка: переменная x не является глобальной
        x = 20
    inner_function()
    print(x)  # Выведет 10
outer_function()

Связанные темы

  • Замыкания (closures)
  • Пространство имен (namespaces)
  • Функции высшего порядка (higher-order functions)

Follow-up вопросы

Можете привести пример локальной и глобальной переменной?

Уровень: basic

Локальная переменная объявляется внутри функции и доступна только в ней, например, x = 10 внутри функции. Глобальная переменная объявляется вне функций и доступна во всем модуле, например, y = 20 в начале файла.

Как изменить глобальную переменную внутри функции?

Уровень: intermediate

Для изменения глобальной переменной внутри функции используется ключевое слово global. Например, global x внутри функции позволяет изменять значение глобальной переменной x.

В чем разница между global и nonlocal?

Уровень: intermediate

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

Что произойдет, если попытаться использовать переменную до ее объявления в локальной области видимости?

Уровень: advanced

Попытка использовать переменную до ее объявления вызовет ошибку UnboundLocalError, так как переменная еще не инициализирована в локальной области видимости.

Как Python ищет переменные в разных областях видимости?

Уровень: advanced

Python сначала ищет переменную в локальной области видимости, затем в объемлющих областях (если используется nonlocal), далее в глобальной области и, наконец, во встроенной (built-in) области видимости.

Содержание