Короткое видео о LEGB-rule, аббревиатуре, в которой отражен порядок поиска имени переменной или функции в python.
Особенности:
1) сначала поиск идет в локальном пространстве имен, максимально близко к использованию имени и далее идет снизу-вверх, изнутри-наружу к глобальному пространству имен
2) после локального пространства имен интерпретатор посмотрит в enclosing, то есть в функцию, которая содержит текущую (если она есть) и далее проверит глобальное пространство имен
3) последним шагом будут проверены имена в модуле builtins (встроенные функции)
4) если на любом этапе имя найдено, то далее поиск не идет. Если все этапы неудачны то выбрасывается NameError
5) важно понимать что даже если мы используем встроенную функцию, типа max/min/sum/print, то интерпретатор сначала проведет поиск по всем скоупам. Вот почему крайне важно НИКОГДА не давать своим переменным, функциям, модулям имена встроенных функций или библиотек (самые частые фейлы это имена типа len, list, sum, json, dict)
Подробно:
1) “Learning Python“, Fifth Edition Chapter 17 by Mark Lutz
2) #naming-and-binding
3) #python-scopes-and-namespaces
Присоединяйтесь к помощи каналу, будет интересно)
✔️Бусти
Будь первым везде и всегда, включай уведомления о новых выпусках 🔔
#Python #PythonRussian #PyCharm #LEGB
350 views
1830
642
2 months ago 00:30:35 339
Что такое global и nonlocal. Легкий способ получить UnboundLocalError