В C/C++ я часто находил полезным при отладке для определения макроса, скажем ECHO(x)
, который печатает имя переменной и ее значение (то есть ECHO(variable)
может печать variable 7
). Вы можете получить имя переменной в макросе, используя оператор 'stringification' #
, как описано here. Есть ли способ сделать это в Python?Найти имя переменной Python, которая была передана функции
Другими словами, я бы как функция
def echo(x):
#magic goes here
, который, если называется foo=7; echo(foo)
(или foo=7; echo('foo')
, может быть), печатал бы foo 7
. Я понимаю, что это тривиально, если я передаю как переменную, так и ее имя в функцию, но я часто использую такие функции при отладке, и повторение всегда вызывает раздражение.
Это второе решение чрезвычайно умна. Разрабатывая, как это работает, я нашел дублирующий вопрос [здесь] (http://stackoverflow.com/questions/5503363/can-you-translate-this-debugging-macro-from-c-to-python) - хотя ваше регулярное выражение немного более надежное, чем аналогичный ответ, данный там. – James
отличный ответ, спасибо. не могли бы вы кратко объяснить, как работает регулярное выражение? – Ferguzz
@Ferguzz, он ищет 'echo', затем' \ s * '- 0 или много пробелов,' \ ('- круглые скобки,' (. +?) \) $ '- не-greddy поиск всех символов перед' \) '(круглые скобки) в конце строки (' $ '). Дополнительная информация доступна по адресу http://www.regular-expressions.info/repeat.html. Вы также можете [debug regexps] (http://stackoverflow.com/a/143636/1052325). Попробуйте в интерактивном сеансе Python: 're.compile (r'echo \ s * \ ((. +?) \) $ ', Re.DEBUG)' – reclosedev