здесь основная (может быть, странная) функция, которая показывает название его аргумента ... идея заключается в том, чтобы проанализировать код и поиск вызовов функции (добавлено в инициализации метода он может помочь найти имя экземпляра, хотя и с более сложным анализом кода)
def display(var):
import inspect, re
callingframe = inspect.currentframe().f_back
cntext = "".join(inspect.getframeinfo(callingframe, 5)[3]) #gets 5 lines
m = re.search("display\s+\(\s+(\w+)\s+\)", cntext, re.MULTILINE)
print m.group(1), type(var), var
обратите внимание: получать несколько строк из кода вызова помогает в том случае, вызов был разделен, как в примере ниже:
display(
my_var
)
но даст неожиданный результат на этом:
display(first_var)
display(second_var)
Если вы не имеете контроля над форматом вашего проекта вы можете улучшить код для обнаружения и управления различными ситуациями ...
В целом, я думаю, статический анализ кода может производить более надежный результат, но я слишком ленив, чтобы проверить это сейчас
Вам не нужно вводить имя переменной, чтобы получить ее имя? –
Да, это было 3 года назад, и я не помню, почему этот вопрос имел смысл. Но woa! он очень популярен, поэтому есть что-то в этом роде. –
Вот пример использования: переменные foo, bar, baz есть, я хочу получить словарь точно так же, как {'foo': foo, 'bar': bar, 'baz': baz}. Конечно, я могу напечатать то, что я только что сделал, но не очень лаконично. 'locals()', на мой взгляд, передают слишком много информации, а не совершенны. То, что я ожидаю, это функция типа 'magic_func ([foo, bar, baz])', которая возвращает словарь, который я хочу – ZZY