- Использование функции locals() в Python
- Что такое таблица символов?
- Что именно делает функция locals()?
- Вызов locals() внутри функции
- Вызов locals() внутри класса
- Вывод
- Ссылки
- Функция locals() в Python
- locals() внутри метода
- locals() внутри класса
- Заключение
- Функция locals() в Python — как использовать
- Что такое locals() в Python?
- Синтаксис
Использование функции locals() в Python
Сегодня мы рассмотрим использование функции Python locals() . Это еще одна служебная функция, которая очень полезна для отладки вашей программы, которая дает нам текущую локальную таблицу символов в виде словаря.
Что такое таблица символов?
Таблица символов — это таблица, содержащая информацию о различных символах. Здесь символ может означать что угодно — имя переменной, ключевое слово, имя функции и т. д.
Они представляют собой все имена всех переменных, классов и функций в вашей программе.
Как правило, таблица символов состоит не только из имен этих объектов, но и другой полезной информации, такой как тип объекта, область действия и т. д.
Для программы на Python существует 2 типа таблиц символов:
- Глобальная таблица символов -> хранит информацию, относящуюся к глобальной области действия программы.
- Таблица локальных символов -> хранит информацию, относящуюся к локальной (текущей) области действия программы.
Это две таблицы символов, определенные на основе глобальной и локальной (текущей) области.
Когда мы обращаемся к локальной таблице символов, мы обращаемся ко всей информации в нашей текущей области, когда интерпретатор выполняет наш код построчно.
Что именно делает функция locals()?
Теперь функция locals() просто вставляет информацию из локальной таблицы символов в консоль в той области, откуда был вызван locals() !
Это, естественно, означает, что вывод locals() будет словарем всех имен переменных и атрибутов, области видимости и т. д.
Например, если у вас есть файл с именем main.py Давайте поместим locals() в качестве нашего единственного оператора и посмотрим, что произойдет. Мы должны получить всю связанную информацию в main области видимости (в данном случае она такая же, как и в глобальной области видимости).
, '__spec__': None, '__annotations__': <>, '__builtins__': , '__file__': '/Users/askpython/home/locals_example.py', '__cached__': None>
Что ж, мы могли видеть некоторые атрибуты main модуля (Global Scope), который также включает некоторые детали пакета!
Как некоторые из вас могут сразу понять, это то же самое, что и globals() , поскольку оба относятся к одной и той же глобальной области.
Вызов locals() внутри функции
Давайте рассмотрим простую функцию fun(a, b) , которая принимает два аргумента a и b и возвращает сумму. Мы вызовем locals() непосредственно перед возвратом функции.
# Global variable global_var = 1234 def fun(a, b): global global_var temp = 100 print(f"locals() inside fun(a, b) = ") return a + b if __name__ == '__main__': print(f"locals() outside fun(a, b) = ") print(fun(10, 20))
locals() outside fun(a, b) = , '__spec__': None, '__annotations__': <>, '__builtins__': , '__file__': 'locals_example.py', '__cached__': None, 'global_var': 1234, 'fun': > locals() inside fun(a, b) = 30
Здесь есть заметное изменение внутри fun(a, b) . Здесь локальная таблица символов состоит только из имен, связанных с этой функцией.
Поскольку локальная область видимости не является частью пакета, информация о пакете отсутствует и содержит только переменные, связанные с функцией, плюс аргументы.
Также обратите внимание, что глобальная переменная global_var является частью глобальной таблицы символов и в результате отсутствует в локальной таблице символов!
Вызов locals() внутри класса
Это похоже на вызов из функции, но будет содержать все методы класса и соответствующие атрибуты.
Давайте быстро взглянем на пример.
class Student(): def __init__(self, name): self.name = name def get_name(self): return self.name print(f"Calling locals() from inside a ") print(f"Calling globals() from inside a ") if __name__ == '__main__': s = Student('Amit') print(s.get_name())
Здесь мы будем вызывать locals() внутри класса после того, как определим все методы класса. Таким образом, эти методы класса также должны быть частью локальной таблицы символов.
Calling locals() from inside a , 'get_name': > Calling globals() from inside a , '__spec__': None, '__annotations__': <>, '__builtins__': , '__file__': 'locals_class.py', '__cached__': None> Amit
Когда мы вызываем locals() из тела класса, мы получаем имя модуля, имя класса и переменные класса. В глобальной таблице символов ничего подобного, как и ожидалось, нет.
Вывод
В этой статье мы узнали, как получить информацию из локальной области видимости с помощью функции locals() . Это возвращает словарь всех полезных имен и атрибутов из локальной таблицы символов и очень полезен для отладки.
Ссылки
- StackOverflow Вопрос о функции Python locals()
- Официальная документация Python по локальным пользователям Python()
- Статья JournalDev о локальных жителях Python()
- Предыдущая Использование функции Python getattr()
- следующий Как использовать метод Python hasattr()?
Использование функции Python getattr()
Функция locals() в Python
Функция locals() в Python возвращает словарь, представляющий текущую локальную таблицу символов.
Программа Python хранит информацию о программе в таблицах символов. Есть два типа таблиц символов:
- Таблица локальных символов – хранит информацию, относящуюся к локальной области действия программы. Мы можем получить эту деталь, используя функцию locals().
- Глобальная таблица символов – хранит информацию, относящуюся к глобальной области действия программы. Мы можем получить эту деталь с помощью функции globals().
Таблица символов в Python содержит подробную информацию об именах переменных, методах, классах и т.д.
Функция Python locals() не принимает никаких аргументов. Посмотрим словарь, возвращаемый функцией locals().
, '__spec__': None, '__annotations__': <>, '__builtins__': , '__file__': '/Users/pankaj/Documents/github/journaldev/Python-3/basic_examples/python_locals_example.py', '__cached__': None>
Если вы выполните print (globals()), вы получите тот же результат. Однако результат может немного отличаться в зависимости от вашей установки Python.
Так в чем же разница между locals() и globals()? Нет никакой разницы, потому что мы выполняем locals() и globals() в самом текущем модуле. Разница будет присутствовать, когда мы вызовем эти функции внутри метода или класса.
locals() внутри метода
Давайте посмотрим, что будет на выходе, когда locals() и globals() вызываются внутри тела функции.
# locals() inside function def fx1(): var = 1 global gl gl = 'x' print('\nlocals() value inside function\n', locals()) print('\nglobals() value inside function\n', globals()) fx1()
locals() value inside function globals() value inside function , '__spec__': None, '__annotations__': <>, '__builtins__': , '__file__': '/Users/pankaj/Documents/github/journaldev/Python-3/basic_examples/python_locals_example.py', '__cached__': None, 'fx1': , 'gl': 'x'>
Итак, ясно, что locals() внутри функции возвращает локальную переменную, обратите внимание, что глобальные переменные являются частью глобального словаря таблицы символов.
locals() внутри класса
Давайте посмотрим на результат, когда locals() вызывается внутри тела класса.
# locals() inside class class Data: x = 0 print('\nlocals() value inside class\n', locals()) print('\nglobals() value inside class\n', globals())
locals() value inside class globals() value inside class , '__spec__': None, '__annotations__': <>, '__builtins__': , '__file__': '/Users/pankaj/Documents/github/journaldev/Python-3/basic_examples/python_locals_example.py', '__cached__': None, 'fx1': , 'gl': 'x'>
При вызове внутри тела класса locals() содержит имя модуля, имя класса и переменные класса.
Заключение
Функция Python locals() в основном используется для отладки. Мы можем проверить, какие переменные присутствуют в локальной области и их значения. Мы также можем изменить их значения, поскольку это словарь, хотя это не рекомендуется.
Функция locals() в Python — как использовать
Python locals() — это встроенная функция, которая возвращает словарь, содержащий переменные, определенные в локальном пространстве имен.
Вызов locals() в глобальном пространстве имен аналогичен вызову globals() и возвращает словарь, представляющий глобальное пространство имен модуля. Рассмотрим как использовать функцию locals() в Python на примерах.
Что такое locals() в Python?
Метод locals() в Python обновляет и возвращает словарь текущей локальной таблицы символов. Таблица символов — это поддерживаемая компилятором структура данных, содержащая всю необходимую информацию о программе. К ним относятся имена переменных, методы, классы и т. д.
Существуют в основном два вида таблиц символов.
Глобальная таблица символов хранит всю информацию, относящуюся к глобальной области действия программы, и доступ к ней осуществляется в Python с помощью метода globals(). Глобальная область видимости содержит все функции, переменные, которые не связаны ни с каким классом или функцией.
Точно так же в таблице локальных символов хранится вся информация, относящаяся к локальной области действия программы, и доступ к ней в Python осуществляется с помощью метода locals(). Локальная область может быть внутри функции, внутри класса и т. д.