← Назад к вопросам

Какая область видимости выше глобальной?

1.8 Middle🔥 201 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Область видимости (Scope) выше глобальной в Python

Ответ: Built-in scope

В Python есть четыре уровня области видимости (LEGB rule), и Built-in scope находится на самом верхнем уровне иерархии, выше даже глобальной области:

  1. L — Local (локальная область функции)
  2. E — Enclosing (область охватывающей функции)
  3. G — Global (глобальная область модуля)
  4. 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

Таблица приоритета поиска

УровеньОбластьГде ищётсяПриоритет
1LocalВнутри функцииСамый высокий
2EnclosingВ охватывающей функции
3GlobalНа уровне модуля
4Built-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.