Функция locals() в Python

Функция locals() в Python: просмотр локальных переменных

locals() — это встроенная функция Python, которая возвращает словарь локальных переменных для текущей области видимости.

Это означает, что она возвращает все переменные, определенные в текущей области видимости, включая аргументы функций, переменные, определенные внутри функции, и так далее.

Синтаксис

Синтаксис функции locals() прост. Она не принимает никаких аргументов и возвращает словарь локальных символов:

locals()

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

Функция locals() возвращает словарь, содержащий все локальные переменные, определенные в текущем пространстве имен. Если вы вызовете функцию locals() внутри функции, она вернет все локальные переменные этой функции.

def test_locals():
    var1 = "Python"
    var2 = 123
    print(locals())

test_locals()

#{'var1': 'Python', 'var2': 123}

В этом примере locals() вызывается внутри функции test_locals(). В выводе будет словарь, содержащий переменные var1 и var2 и их значения.

Ограничения функции locals()

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

def test_locals():
    var1 = "Python"
    locals()["var1"] = "Changed"
    print(var1)

test_locals()  

#Python

В этом примере, несмотря на то что мы пытались изменить var1 через словарь, возвращенный locals(), значение var1 не изменилось.

Использование locals() внутри классов

locals() также можно использовать внутри классов, где она возвращает словарь, содержащий все атрибуты класса и методы.

class MyClass:
    def __init__(self):
        self.attr = "Python"
        print(locals())

my_obj = MyClass()  

#{'self': <__main__.MyClass object at 0x0000015D67E454B0>}

Использование locals() для отладки

Функция locals() может быть полезной для отладки кода, особенно когда вы работаете с большими функциями и хотите увидеть, какие переменные были определены до определенного момента времени.

def complex_function():
    var1 = "Python"
    # Больше кода...
    var2 = [1, 2, 3]
    # Еще больше кода...
    print(locals())

complex_function()

#{'var1': 'Python', 'var2': [1, 2, 3]}

В этом примере locals() вызывается внутри функции complex_function(), позволяя вам увидеть все переменные, которые были определены до этого момента.

Использование locals() в рекурсии

locals() может быть полезной при отладке рекурсивных функций, поскольку каждый вызов функции имеет свою собственную локальную область видимости.

def recursive_function(n):
    if n == 0:
        return
    print(f"At recursion level {n}, locals are {locals()}")
    recursive_function(n-1)

recursive_function(3)

#At recursion level 3, locals are {'n': 3}
#At recursion level 2, locals are {'n': 2}
#At recursion level 1, locals are {'n': 1}

В этом примере locals() показывает локальные переменные на каждом уровне рекурсии.

Заключение

Функция locals() — это удобный инструмент для просмотра локальной области видимости в Python. Однако нужно быть осторожным при работе с возвращаемым ею словарем, поскольку изменения в этом словаре не отражаются на реальной локальной области видимости.

Содержание: