Что такое область видимости
Разбор вопроса «Что такое область видимости» для 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) области видимости.
Что такое класс в JS
Разбор вопроса «Что такое класс в JS» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
Как изолировать var в функциональной области видимости
Разбор вопроса «Как изолировать var в функциональной области видимости» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.