Рубрики
Без рубрики

Использование функции Python Locals ()

Сегодня мы будем смотреть на использование функции Python Locals (). Это еще одна полезная функция, которая весьма полезна для отладки вашей программы.

Автор оригинала: Pankaj Kumar.

Сегодня мы будем смотреть на использование Python Местные жители () функция. Это еще одна полезная функция, которая весьма полезна для отладки вашей программы.

Функция Locals () дает нам текущую локальную таблицу символов, как словарь.

Теперь, если вы не уверены в том, что именно локальная таблица символов сохраняет чтение. Пойдем шаг за шагом, начиная с определения таблицы символов.

Что такое символ стол?

Ну, таблица символов – это таблица, состоящая из информации относительно разных символов. Здесь символ может означать что-либо – имя переменной, ключевое слово, имя функции и т. Д.

Они представляют все имена всех переменных, классов и функций в вашей программе.

Как правило, таблица символов не только состоит из названий этих объектов, но и другая полезная информация, как и тип объекта, объем и т. Д.

Теперь, когда вы знаете, что означает символ таблицы, давайте приходим к классам таблиц символов.

Есть 2 типа таблиц символов, для программы Python:

  • Глобальный символ Стол -> Магазины информации, связанной с глобальным объемом программы
  • Локальный символ Стол -> Магазины информации, связанной с локальным (текущим) объемом программы

Это две таблицы символов, определенные на основе глобального объема и локального (текущего) объема.

Когда мы ссылаемся на локальный символ таблицы, мы ссылаемся на всю информацию в нашем Текущий Область применения, когда интерпретатор выполняет нашу линию кода по линии.

Что именно делает функцию Python Locals ()?

Теперь, что за Местные жители () Функция делает, это просто вставить информацию о локальной таблице символов на консоли, на этой области, где Местные жители () был назван!

Так что это естественно означает, что выпуск Python Местные жители () Будет словарь всех переменных имен и атрибутов, объем и т. Д.

Например, если у вас есть файл под названием main.py Отказ Давайте поставить Местные жители () Как наше единственное утверждение, и посмотрите, что происходит. Мы должны получить всю связанную информацию в Главная Область (в этом случае это так же, как глобальный объем)

# main.py
print(locals())

Возможный выпуск

{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x12ba85542>, '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': '/Users/askpython/home/locals_example.py', '__cached__': None}

Ну, мы могли видеть некоторые атрибуты Главная Модуль (глобальный объем), который также включает в себя некоторые детали пакета!

Как некоторые из вас могут сразу реализовать, это так же, как глобал () Здесь, поскольку оба относятся к тому же глобальному объему.

Вызов местных жителей () от локальной области

Теперь давайте рассмотрим звонить Местные жители () Внутри местного охвата, от функции.

Вызов местных жителей () внутри функции

Давайте рассмотрим простую функцию Веселье (A, B) , это требует двух аргументов А и B и возвращает сумму. Мы позвоним Местные жители () Незадолго до возвращения функции.

# Global variable
global_var = 1234

def fun(a, b):
    global global_var
    temp = 100
    print(f"locals() inside fun(a, b) = {locals()}")
    return a + b

if __name__ == '__main__':
    print(f"locals() outside fun(a, b) = {locals()}")
    print(fun(10, 20))

Выход

locals() outside fun(a, b) = {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7f7023e1ff60>, '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': 'locals_example.py', '__cached__': None, 'global_var': 1234, 'fun': }
locals() inside fun(a, b) = {'a': 10, 'b': 20, 'temp': 100}
30

Здесь есть заметное изменение изнутри Веселье (A, B) Отказ Здесь локальная таблица символов состоит только из имени, связанных с этой функцией.

Поскольку локальный объем не является частью пакета, нет информации пакета, и это содержит только переменные, связанные с функцией, а также аргументы.

Также обратите внимание, что глобальная переменная Global_var является частью таблицы глобального символа и отсутствует в локальной таблице символов в результате!

Вызов местных жителей () внутри класса

Это похоже на вызов из функции, но это будет содержать все методы класса и соответствующие атрибуты.

Давайте быстро посмотрим, используя пример.

class Student():
    def __init__(self, name):
        self.name = name
    def get_name(self):
        return self.name
    print(f"Calling locals() from inside a class => {locals()}")
    print(f"Calling globals() from inside a class => {globals()}")

if __name__ == '__main__':
    s = Student('Amit')
    print(s.get_name())

Здесь мы будем звонить Местные жители () Внутри класса после определения всех методов классов. Таким образом, эти методы класса также должны быть частью локальной таблицы символов.

Выход

Calling locals() from inside a class => {'__module__': '__main__', '__qualname__': 'Student', '__init__': , 'get_name': }

Calling globals() from inside a class => {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7fe2673cff28>, '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': 'locals_class.py', '__cached__': None}
Amit

Действительно, как вы можете видеть, Местные жители () Дает соответствующие методы!

Когда мы называем Местные жители () Из-за корпуса класса мы получим имя модуля, имя класса и переменные классов.

Таблица глобального символа не имеет ничего особенного, как и ожидалось.

Заключение

В этой статье мы узнали, как мы можем получить информацию от местного объема, используя Местные жители () функция. Это возвращает словарь всех полезных имен и атрибутов из локальной таблицы символов и очень полезен для отладки.

Рекомендации