Короткое видео о LEGB-rule, аббревиатуре, в которой отражен порядок поиска имени переменной или функции в python.
Особенности:
1) сначала поиск идет в локальном пространстве имен, максимально близко к использованию имени и далее идет снизу-вверх, изнутри-наружу к глобальному пространству имен
2) после локального пространства имен интерпретатор посмотрит в enclosing, то есть в функцию, которая содержит текущую (если она есть) и далее проверит глобальное пространство имен
3) последним шагом будут проверены имена в модуле builtins (встроенные функции)
4) если на любом этапе имя найдено, то далее поиск не идет. Если все этапы неудачны то выбрасывается NameError
5) важно понимать что даже если мы используем встроенную функцию, типа max/min/sum/print, то интерпретатор сначала проведет поиск по всем скоупам. Вот почему крайне важно НИКОГДА не давать своим переменным, функциям, модулям имена встроенных функций или библиотек (самые частые фейлы это имена типа len, list, sum, json, dict)
Е