getattr () versus dict-Lookup, was ist schneller?

7

Eine etwas noobish, Best-Practice-Frage. Ich suche Objektattributwerte dynamisch mit object.__dict__[some_key] aus. Jetzt frage ich mich was besser / schneller ist: meine aktuelle Gewohnheit oder getattr(object,some_key) . Wenn einer besser ist, warum?

%Vor%     
Cole 29.12.2012, 18:56
quelle

1 Antwort

35

Es ist viel besser, getattr() zu verwenden, als direkt in die __dict__ -Struktur zu gehen.

Nicht weil es schneller oder langsamer ist, sondern weil die offizielle API unter all Bedingungen funktioniert, einschließlich für Klassen die nicht haben __dict__ (wenn __slots__ zum Beispiel) oder wenn ein Objekt das __getattr__ oder __getattribute__ Hooks oder wenn das betreffende Attribut ein ist Deskriptor (z. B. property ) oder ein Klassenattribut.

Wenn Sie wissen möchten, ob eine Python-Anweisung oder -Technik schneller als eine andere ist, verwenden Sie das Modul timeit bis messen den Unterschied:

%Vor%

Sie können sehen, dass der direkte Zugriff auf __dict__ schneller ist, aber getattr() macht viel mehr Arbeit.

    
Martijn Pieters 29.12.2012, 18:58
quelle