Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
# Область видимости (Scope) выше глобальной в Python
Ответ: Built-in scope
В Python есть четыре уровня области видимости (LEGB rule), и Built-in scope находится на самом верхнем уровне иерархии, выше даже глобальной области:
- L — Local (локальная область функции)
- E — Enclosing (область охватывающей функции)
- G — Global (глобальная область модуля)
- B — Built-in (встроенная область интерпретатора)
Что такое Built-in scope?
Built-in scope — это область видимости, которая содержит встроенные объекты и функции Python, такие как:
# Встроенные функции
print() # функция вывода
len() # длина
range() # диапазон
type() # тип объекта
int() # преобразование в int
str() # преобразование в string
open() # открытие файла
map() # маппирование
filter() # фильтрация
sum() # сумма
max() # максимум
min() # минимум
enumerate() # перечисление
zip() # объединение
# Встроенные константы
True, False, None
# Встроенные исключения
Exception, ValueError, TypeError, KeyError
# Встроенные типы
int, str, list, dict, set, tuple
Эта область создаётся автоматически при запуске интерпретатора и доступна везде без импорта.
Как Python ищет переменные (LEGB)
import builtins
# Built-in scope (самый верхний уровень)
print(builtins.print) # <built-in function print>
print(builtins.len) # <built-in function len>
# Global scope
global_var = 'я глобальная'
def outer():
# Enclosing scope
enclosing_var = 'я охватывающая'
def inner():
# Local scope (самый нижний уровень)
local_var = 'я локальная'
# Поиск переменной: local → enclosing → global → built-in
print(local_var) # Найдётся в Local
print(enclosing_var) # Найдётся в Enclosing
print(global_var) # Найдётся в Global
print(len([1, 2, 3])) # Найдётся в Built-in
return inner
func = outer()
func()
Практический пример: переопределение Built-in
Вы можете переопределить встроенную функцию, но она заслонит встроенную только в текущей области видимости:
# Исходная встроенная функция
print(len([1, 2, 3])) # 3
# Переопределяем в Global scope
def len(obj):
return 'Это моя версия len!'
print(len([1, 2, 3])) # Это моя версия len!
# Но можем вернуть встроенную версию через builtins
import builtins
print(builtins.len([1, 2, 3])) # 3
Доступ к Built-in scope
import builtins
# Просмотр всех встроенных функций и объектов
print(dir(builtins))
# ['ArithmeticError', 'AssertionError', 'AttributeError', ..., 'zip']
# Получить конкретный встроенный объект
original_print = builtins.print
original_len = builtins.len
original_type = builtins.type
Таблица приоритета поиска
| Уровень | Область | Где ищётся | Приоритет |
|---|---|---|---|
| 1 | Local | Внутри функции | Самый высокий |
| 2 | Enclosing | В охватывающей функции | ↑ |
| 3 | Global | На уровне модуля | ↓ |
| 4 | Built-in | Встроенные функции | Самый низкий |
Пример LEGB в действии
# BUILT-IN SCOPE
len = 'Это затемняет встроенную функцию len'
# GLOBAL SCOPE
x = 'глобальная переменная'
def outer():
# ENCLOSING SCOPE
x = 'охватывающая переменная'
def inner():
# LOCAL SCOPE
x = 'локальная переменная'
print(x) # локальная переменная (из Local)
print(len) # Это затемняет встроенную функцию len (из Global)
inner()
print(x) # охватывающая переменная (из Enclosing)
outer()
print(x) # глобальная переменная (из Global)
Практическое применение
В реальном коде Built-in scope используется постоянно:
# Все эти функции из Built-in scope
for i in range(10): # range из Built-in
print(i) # print из Built-in
numbers = [1, 2, 3]
total = sum(numbers) # sum из Built-in
types_list = [type(x) for x in numbers] # type из Built-in
try:
result = 10 / 0
except ZeroDivisionError: # ZeroDivisionError из Built-in
print('Ошибка!') # print из Built-in
Итог
Built-in scope — это самый верхний уровень иерархии областей видимости в Python. Он содержит встроенные функции, типы, константы и исключения, которые всегда доступны без импорта. При поиске переменной интерпретатор проходит по LEGB правилу снизу вверх, и Built-in scope проверяется в последнюю очередь, но он имеет самый высокий уровень иерархии в системе областей видимости Python.