2016-06-09 8 views
0

Der folgende Code:Warum werden identische Teiltafeln in Python (2.7.11) als ungleich verglichen?

from functools import partial 
def f(a): 
    print a 
g = partial(f, 1) 
h = partial(f, 1) 
assert(g == h) 

wirft eine Behauptung Fehler. Warum?

Partial gibt ein aufrufbares Objekt mit den Attributen .func, .args und .keywords zurück. Im Beispiel:

g.func == h.func == f 
g.args == h.args == (1,) 
g.keywords == h.keywords == {} 

Sollte nicht g == h?

Antwort

1

Ich schaute mehr in die Implementierung, und das Teilobjekt scheint nur eine innere Funktion mit den oben genannten Attributen zu sein. Funktionen vergleichen niemals gleich, es sei denn, sie sind das gleiche Objekt. Schade, ich habe einen Anwendungsfall, aber es gibt mehrere Work-Arounds.

+2

Die wahrscheinlichste ist wahrscheinlich, eine klassenbasierte Ersetzung zu erstellen, die '__eq __()' definiert. –