locals

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

Синтаксис

locals()

Аргументы

Функция не принимает аргументов.

Возвращаемое значение

Словарь, представляющий локальные переменные текущей области видимости. Ключами являются имена переменных, а значениями — их текущие значения.

Примеры использования

# В глобальной области видимости
a = 10
b = 20
print(locals())
# Вывод: {'a': 10, 'b': 20, ...}
# Внутри функции
def example_function():
    x = 5
    y = 10
    print(locals())

example_function()
# Вывод: {'x': 5, 'y': 10}
# Внутри цикла
for i in range(3):
    temp = i * 2
    print(locals())
# Вывод для каждой итерации:
# {'i': 0, 'temp': 0}
# {'i': 1, 'temp': 2}
# {'i': 2, 'temp': 4}

Эквивалентный код

def pyplanet_locals():
    import inspect
    frame = inspect.currentframe()
    return frame.f_locals

# Пример использования
x = 10
print(pyplanet_locals())
# Вывод: {'x': 10}

Частые ошибки

  1. Изменение словаря, возвращаемого locals():

    def example():
        local_var = 10
        locals()['local_var'] = 20
        print(local_var)
    
    example()
    # Вывод: 10 (изменения словаря ``locals()`` не отражаются на реальных переменных)
    

    Как исправить: Не изменяйте словарь, возвращаемый locals(), так как такие изменения не гарантируют изменений в реальных переменных.

  2. Использование locals() в глобальной области видимости для изменения переменных:

    locals()['a'] = 100
    print(a)
    # Ошибка: NameError (или оригинальное значение переменной)
    

    Как исправить: Для изменения глобальных переменных используйте globals().

  3. Попытка использовать locals() в замыкании для изменения переменных:

    def outer_function():
        x = 5
    
        def inner_function():
            locals()['x'] = 10
            print(x)
    
        inner_function()
    
    outer_function()
    # Вывод: 5
    

    Как исправить: Локальные переменные внутри функций не могут быть изменены напрямую через locals().

Часто задаваемые вопросы

  1. Что возвращает locals() в глобальной области видимости? В глобальной области видимости locals() возвращает тот же словарь, что и globals():

    print(locals() is globals())  # True
    
  2. Можно ли использовать locals() для изменения переменных? Хотя словарь, возвращаемый locals(), можно изменить, это не гарантирует изменений реальных переменных:

    def test():
        x = 10
        locals()['x'] = 20
        print(x)
    
    test()  # Вывод: 10
    
  3. Чем отличается locals() от globals()? - locals() возвращает локальные переменные текущей области видимости. - globals() возвращает глобальные переменные.

  4. Можно ли использовать locals() для отладки? Да, locals() часто используется для получения текущих переменных при отладке:

    def debug_example():
        a = 1
        b = 2
        print("Локальные переменные:", locals())
    
    debug_example()
    # Вывод: Локальные переменные: {'a': 1, 'b': 2}
    
  5. Работает ли locals() внутри классов? Да, возвращает локальные переменные, объявленные в классе:

    class Example:
        x = 10
        y = 20
        print(locals())
        # Вывод: {'__module__': '__main__', 'x': 10, 'y': 20, ...}