Получить локальных пользователей от вызова пространства имен в Python

Я хочу получить локальные переменные из Python из вызываемой функции. Есть какой-либо способ сделать это? Я понимаю, что это не подходит для большинства программ, но я в основном создаю отладчик. Например:

def show_locals(): # put something in here that shows local_1. local_1 = 123 show_locals() # I want this to show local_1. 

Что я помещаю в тело show_locals ? Если мне нужно изменить вызывающий оператор, какова минимальная модификация, которую я могу сделать?

Примечание: это должно работать, когда show_locals находится в другом модуле для своего вызывающего.

2 Solutions collect form web for “Получить локальных пользователей от вызова пространства имен в Python”

Если вы пишете отладчик, вам нужно будет активно использовать модуль inspect :

 def show_callers_locals(): """Print the local variables in the caller's frame.""" import inspect frame = inspect.currentframe() try: print(frame.f_back.f_locals) finally: del frame 

Вы используете встроенный python, dir () или vars ():

вары (объект)

Примеры использования dir () см. В этом сообщении.

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

 >>> class X: ... a=1 ... def __init__(self): ... b=2 ... >>> >>> vars(X) {'a': 1, '__module__': '__main__', '__doc__': None, '__init__': <function __init__ at 0x100488848>} >>> >>> vars(X()) {} 

Потенциально проблематичный факт: новые классы стиля не возвращают одинаковый результат

 >>> class X(object): ... a=1 ... def __init__(self): ... b=2 ... >>> >>> vars(X) <dictproxy object at 0x1004a1910> >>> vars(X()) {} 

Кроме того: для созданного экземпляра класса (новый и старый стиль), если вы добавите переменную после создания экземпляра, vars вернет запрос объекта так:

 >>> x = X() >>> xc = 1 >>> vars(x) {'c': 1} >>> 

См .: http://docs.python.org/library/functions.html#vars

  • В Python, время, возвращаемое временем (), всегда измеряется с 1 января 1970 года?
  • Преобразование объекта генератора в список для отладки
  • Почему и как работают функции Python?
  • Разделите генератор на куски без предварительной ходьбы
  • Цифровые разделители в коде Python
  • AssertionError: отображение функции просмотра переписывает существующую функцию конечной точки: main
  • Как выйти из генератора в определенное время?
  • Найти функции, явно определенные в модуле (python)
  • Python - лучший язык программирования в мире.