Na przykład

class c:
    var = 15

getattr(c, 'var')

Lub

i = 0
globals()['i'] = 25

Dlaczego tutaj nasze zmienne pisanie jak typ ciągu. Widziałem to w niektórych wbudowanych funkcjach i Django i myślę, że to sprawia, że kod wiele trudności dla zrozumienia nie jest?

-2
Hman 16 październik 2017, 17:54

2 odpowiedzi

Najlepsza odpowiedź

globals() Zwraca słownik, więc musisz użyć nazwy zmiennej jako ciągu, aby się przyglądać. W globals()['var'] 'var' jest tylko kluczem w globals() zwrócił dykt, więc musi być podany jako ciąg.

getattr(c, 'var') Szuka atrybutu {x1}} w c.__dict__.

Pamiętaj: Python robi ciężki nas dykt.

0
lpozo 16 październik 2017, 15:39

Jeśli znasz nazwę zmiennych wcześniej i są stałe, możesz zrobić oba te rzeczy w inny sposób:

getattr(c, 'var')

Jest to skrót do:

try:
    return c.var
except AttributeError:
    if have_default: # hand-wavey "more to this" for a later lesson
       return default
    raise

I

globals()['i'] = 25

Jest nieprzyjemny sposób

global i
i = 25

Podana metoda jest zasadniczo dołącza do internali i bawiąc się z nimi. Korzystanie ze słowa kluczowego global jest lepszym sposobem na oświadczenie, że używasz zmiennej w zakresie globalnego, ponieważ gdy funkcja jest interpretowana Python wie, że zmienna jest z innego zakresu w tym punkcie.

Jednak jeśli wcześniej nie znasz nazwy zmiennej, musisz zrobić to, aby zrobić to drogę w twoich przykładach. (ale proszę, pomyśl dwa razy, zanim za pomocą globals

0
Andrew Gelnar 16 październik 2017, 15:13