Веб-версияОткрыть в Telegram

Постglobals(), locals(), vars(), dir()

15 июля 2022
P
Python RU
globals(), locals(), vars(), dir() Программист на Python может узнать, какие именно переменные определенны в данный момент в интерпретаторе. Переменные можно разделить на локальные и глобальные. Глобальные определены на верхнем уровне кода снаружи функций и классов (грубо говоря без отступов слева). Локальные переменные наоборот определены внутри своих зон видимости, ограниченных классами и функциями. Функция globals() выдает словарь глобальных переменных (ключ – имя переменной). Функция locals() возвращает словарь только локальных переменных. Пример: x, y = 5, 10 def test(): y, z = 33, 44 print('globals:', globals()) print('locals:', locals()) test() """Вывод: globals: {'__name__': '__main__', ... '__file__': '/Users/.../vars.py', '__cached__': None, 'x': 5, 'y': 10, 'test': <function test at 0x107677280>} locals: {'y': 33, 'z': 44}""" Обратите внимание, что переменная y в locals() имеет другое значение, нежели чем в globals(). Это две разные переменные из разных областей, но внутри функции приоритет имеет локальная y. Еще важно знать, что в список переменных входят не только простые переменные, которые вы определяете через знак присваивания, но и функции, классы и импортированные модули! Через словари из locals() и globals() переменные можно не только читать, но и создавать, перезаписывать и удалять: >>> x = 10 >>> globals()['x'] = 5 >>> x 5 >>> globals()['new_var'] = 10 >>> new_var 10 >>> del globals()['new_var'] >>> new_var Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'new_var' is not defined Функция vars() ведет себя как locals(), если вызвана без аргумента, а если с аргументом, то она просто получает _ _ dict _ _ от аргумента. Если его нет у аргумента, то будет TypeError. class Foo: def __init__(self): self.x = 5 f = Foo() print(vars(f)) # {'x': 5} print(vars(f) == f.__dict__) # True В глобальном контексте все три функции возвращают одно и тоже – глобальные переменные. Проверьте: print(globals()) print(locals()) print(vars()) print(globals() == locals() == vars()) # True Функциия dir(), будучи вызвана без параметра, возвращает список имен переменных. Глобальных или локальных в зависимости от места вызова: def test(): x = 10 print(dir()) # ['x'] y = 10 test() print(dir()) # ['__annotations__', ..., '__spec__', 'test', 'y'] Все рассмотренные выше функции являются встроенными и не требуют импортов. @pro_python_code
👍13❤2
16 · 2.4K ·

Рядом в ленте

PPython RU🐍📚 Создаем аналог LiveLib.ru на Flask. Часть 2: CRUD, IntegrityError и валидация WTForms Читать 1 часть @pro_python_codePPython RU⚡️ Профилируем код Не можете найти слабое место у вашего алгоритма (не можете, поскольку его нет 😎)? Давайте тогда посмотрим на использование ресурсов с помощью
это сообщение
PPython RU@pro_python_codePPython RUjgram – Библиотека для написания телеграм ботов, что позволяет описывать их структуру в json файлах Призвана ускорить написание ботов, и сделать их структуру бо

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем