Oto podstawowa (może dziwna) funkcja, która pokazuje nazwę jej argumentu ... idea jest analizowanie kodu i poszukiwanie wywołań funkcji (dodanej w Init metoda może pomóc, aby znaleźć nazwę instancji, choć o bardziej skomplikowanej analizy kodu)
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
uwaga: się wiele wierszy z kodu wywołującego pomaga w przypadku, gdy połączenie zostało podzielone, jak w poniższym przykładzie:
display(
my_var
)
ale będzie produkować nieoczekiwany rezultat w tej sprawie:
display(first_var)
display(second_var)
Jeśli nie masz kontroli nad formatem projektu można jeszcze poprawić kod do wykrywania i zarządzania różne sytuacje ...
Ogólnie myślę, statyczna analiza kodu może produkować bardziej wiarygodne wyniki, ale jestem zbyt leniwy, aby to sprawdzić teraz
Nie musisz wpisywać nazwy zmiennej, aby uzyskać jej nazwę? –
Tak, cóż, minęło już 3 lata temu i nie pamiętam, dlaczego to pytanie miało sens. Ale woa! jest bardzo popularny, więc coś w tym jest. –
Oto przykład użycia: istnieją zmienne foo, bar, baz, chcę uzyskać słownik dokładnie taki jak {'foo': foo, 'bar': bar, 'baz': baz}. Na pewno mogę wypisać to, co właśnie zrobiłem, ale nie bardzo zwięźle. 'locals()', moim zdaniem, przekazują zbyt wiele informacji, nie są doskonałe. Oczekuję, że funkcja taka jak 'magic_func ([foo, bar, baz])', która zwróci słownik, który chcę – ZZY