Python Language
Teilfunktionen
Suche…
Einführung
Wie Sie wahrscheinlich wissen, wenn Sie aus der OOP-Schule kamen, ist die Spezialisierung einer abstrakten Klasse eine Übung, die Sie beim Schreiben Ihres Codes berücksichtigen sollten.
Was wäre, wenn Sie eine abstrakte Funktion definieren und spezialisieren könnten, um verschiedene Versionen davon zu erstellen? Dient als eine Art Funktionsvererbung, bei der Sie bestimmte Parameter binden, um sie für ein bestimmtes Szenario zuverlässig zu machen.
Syntax
- partiell (Funktion, ** params_you_want_fix)
Parameter
Param | Einzelheiten |
---|---|
x | die Zahl, die erhöht werden soll |
y | der Exponent |
erziehen | die Funktion, spezialisiert zu sein |
Bemerkungen
Wie in Python doc angegeben, die functools.partial :
Gibt ein neues Teilobjekt zurück, das sich beim Aufruf wie func verhält, das mit den Schlüsselwörtern positional arguments args und keyword arguments aufgerufen wird. Wenn mehr Argumente an den Aufruf übergeben werden, werden sie an args angehängt. Wenn zusätzliche Schlüsselwortargumente angegeben werden, erweitern und überschreiben sie Schlüsselwörter.
Überprüfen Sie diesen Link , um zu sehen, wie partiell implementiert werden kann.
Erhöhen Sie die Kraft
Nehmen wir an, wir wollen x auf eine Zahl y erhöhen.
Sie würden dies schreiben als:
def raise_power(x, y):
return x**y
Was ist, wenn Ihr y- Wert eine begrenzte Menge von Werten annehmen kann?
Nehmen wir an, y kann eine von [3,4,5] sein, und nehmen wir an, Sie möchten dem Endbenutzer nicht die Möglichkeit bieten, eine solche Funktion zu verwenden, da sie sehr rechenintensiv ist. In der Tat würden Sie prüfen, ob y einen gültigen Wert annimmt, und Ihre Funktion neu schreiben als:
def raise(x, y):
if y in (3,4,5):
return x**y
raise NumberNotInRangeException("You should provide a valid exponent")
Unordentlich? Verwenden wir die abstrakte Form und spezialisieren Sie sie auf alle drei Fälle: Lassen Sie uns sie teilweise implementieren.
from functors import partial
raise_to_three = partial(raise, y=3)
raise_to_four = partial(raise, y=4)
raise_to_five = partial(raise, y=5)
was geschieht hier? Wir haben die y- Parameter korrigiert und drei verschiedene Funktionen definiert.
Sie brauchen die oben definierte abstrakte Funktion nicht zu verwenden (Sie könnten sie als privat definieren ), aber Sie können teilweise angewendete Funktionen verwenden, um das Erhöhen einer Zahl auf einen festen Wert zu behandeln.