Erkennen von leeren Funktionsdefinitionen in Python

9

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%     
Benji Mizrahi 29.11.2012, 07:08
quelle

3 Antworten

4

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%     
kcon 11.07.2014 04:05
quelle
1

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 .

    
Jack Lindsey 03.12.2012 04:58
quelle
-2

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.

    
jary 05.01.2013 09:54
quelle