Ich habe mit Python arbeiten und ich die folgenden Code Situation auf:Python functools Teileffizienz
import timeit
setting = """
import functools
def f(a,b,c):
pass
g = functools.partial(f,c=3)
h = functools.partial(f,b=5,c=3)
i = functools.partial(f,a=4,b=5,c=3)
"""
print timeit.timeit('f(4,5,3)', setup = setting, number=100000)
print timeit.timeit('g(4,5)', setup = setting, number=100000)
print timeit.timeit('h(4)', setup = setting, number=100000)
print timeit.timeit('i()', setup = setting, number=100000)
ich folgenden als Ergebnis erhalten:
f: 0.181384086609
g: 0.39066195488
h: 0.425783157349
i: 0.391901016235
Warum die Anrufe an den Teilfunktionen dauern länger? Versetzt die Teilfunktion die Parameter nur an die ursprüngliche Funktion oder bildet sie die statischen Argumente vollständig ab? Und gibt es auch eine Funktion in Python, um den Körper einer ausgefüllten Funktion zurückzugeben, vorausgesetzt, dass alle Parameter wie bei Funktion i vordefiniert sind?
Danke für die Hilfe. Gibt es eine Chance, dass Sie oder jemand mir einen Tipp geben könnte, wie das geht? Würde es das Manipulieren des Byte-Code-Objekts (Funktion .__ Code__) oder kann es nur durch das Funktionsobjekt erfolgen? – user2515310
Ich habe meine Antwort aktualisiert. Aber sind Sie wirklich besorgt über die Geschwindigkeit? Was ist dein Problem? – warvariuc
Sie sind absolut erstaunlich. Vielen Dank. Und aus Gründen der Interessen arbeite ich an einer Python-API und wollte eine Möglichkeit für einen Entwickler, eine Funktion für ein Element zu definieren und dann diese Funktion in eine schnelle Schleife einzufügen, aber die Funktion ruft in der Python-Implementierung auf, mit der ich arbeite prohibitive to speed (wie aus meinen timeit-Ergebnissen ersichtlich ist). – user2515310