Ich muss erkennen, ob eine Funktion eine leere Definition ist oder nicht. Es kann wie sein:
%Vor%oder wie:
%Vor%oder wie:
%Vor%Was ist der eleganteste Weg, sie mit dem Modul 'inspect' zu erkennen? Gibt es einen besseren Weg als das:
%Vor%Die von Ihnen vorgeschlagene Methode funktioniert nicht ganz, weil leere Funktionen mit Docstrings einen etwas anderen Bytecode haben.
Der Wert von func.__code__.co_code
für eine leere Funktion ohne Docstring ist 'd\x00\x00S'
, während der Wert für eine Funktion mit einem Docstring 'd\x01\x00S'
ist.
Für meine Zwecke funktioniert es nur, um den zusätzlichen Fall hinzuzufügen, nach dem zu testen ist:
%Vor%Die Art, wie Sie arbeiten, funktioniert. Eine vielleicht "elegantere" Lösung wäre eine Liste von Funktionen, und in all Ihren leeren (oder allen nicht leeren) Funktionen würden Sie sie zur Liste hinzufügen und dann prüfen, ob die Funktion in der Liste ist oder nicht .
Warum würden Sie das tun? Es sieht aus wie schlechtes Design. Ich würde wetten, dass du nichts schneller machen würdest.
%Vor%Es scheint so, als wäre die Magnitude langsamer verglichen als nur Call, weil es in der letzten Zeit zehnmal mehr Loops gab. Der Gleichheitsoperator wird tatsächlich sicher einen. Code .co_code. eq aufrufen. Du machst also die Dinge langsamer.
Tags und Links python introspection code-inspection