Kann man teilweise gelten, das zweite argument eine Funktion, die keine keyword-Argumente?
Nehmen Sie zum Beispiel die python-gebaut in pow()
Funktion.
xs = [1,2,3,4,5,6,7,8]
from functools import partial
list(map(partial(pow,2),xs))
>>> [2, 4, 8, 16, 32, 128, 256]
aber wie kann ich das erhöhen der xs-die macht der 2?
bekommen [1, 4, 9, 16, 25, 49, 64]
list(map(partial(pow,y=2),xs))
TypeError: pow() takes no keyword arguments
Ich weiß, Liste Verstehens wäre einfacher.
- eine weitere Verwendung von partiellen ausgehend von 2-nd-argument ist teilweise für die Methode(N) weglassen self-argument
Du musst angemeldet sein, um einen Kommentar abzugeben.
Keine
Laut die Dokumentation,
teilweise
nicht dies tun (besonders meine eigenen):Konnte man immer nur "fix"
pow
zu Stichwort args:pow
functools.partial()
mehr.Ich denke, ich würde nur verwenden Sie diese einfachen Einzeiler:
Update:
Kam ich auch mit einer Lustiger als sinnvolle Lösung. Es ist eine schöne syntaktischen Zucker, profitiert von der Tatsache, dass die
...
literal bedeutetEllipsis
in Python ist3. Es ist eine modifizierte version vonpartial
, so dass das weglassen einige positionelle Argumente zwischen den ganz Links und ganz rechts ersetzt. Der einzige Nachteil ist, dass Sie nicht passieren können mehr Ellipse als argument.So das die Lösung für die ursprüngliche Frage wäre mit dieser version teilweise
list(map(partial(pow, ..., 2),xs))
list(map(pow, [1, 2, 3], itertools.repeat(2)))
map
in Python ist3Warum nicht erstellen Sie einfach eine schnelle lambda-Funktion verschiebt die Argumente und teilweise, dass
Könnten Sie eine helper-Funktion für diese:
Disclaimer: ich habe nicht getestet, die mit keyword-Argumenten so könnte es sprengen, weil Sie irgendwie. Auch ich bin mir nicht sicher, ob dies ist, was
@wraps
verwendet werden soll, aber es schien, Recht -ish.functools.partial
. Aber das ist definitiv gespeichert werden. Mag ich 🙂könnte man eine Schließung
Einen Weg, es zu tun wäre:
aber dies beinhaltet re-Definition der pow-Funktion.
wenn die Verwendung von partiellen war nicht 'gebraucht', dann ist eine einfache lambda würde den trick tun
Und eine bestimmte Art Karte der pow 2 wäre
aber keiner von diesen voll das problem direkt von partiellen Einsatz in Bezug auf keyword-Argumente
Können Sie dies mit
lambda
, die ist flexibler alsfunctools.partial()
:Allgemein:
Einem down-Seite von lambda ist, dass einige Bibliotheken sind nicht in der Lage, es zu serialisieren.
Sehr vielseitig funcy umfasst eine
rpartial
Funktion, die genau diesem problem begegnet.Es ist nur eine lambda-unter der Haube:
Wie gesagt, dass ist eine Einschränkung der
functools.teilweise
, wenn die Funktion, die Sie möchtenpartial
nicht akzeptieren keyword-Argumenten.Wenn es Ihnen nichts ausmacht mit einer externen Bibliothek 1, die Sie nutzen könnten
iteration_utilities.teilweise
, die hat teilweise unterstützt Platzhalter:1 Disclaimer: ich bin der Autor des
iteration_utilities
Bibliothek (Installations-Anleitung finden Sie in der Dokumentation falls du interessiert bist).Wenn Sie nicht verwenden können, lambda-Funktionen, können Sie auch schreiben, ein einfaches wrapper-Funktion, die ändert die Reihenfolge der Argumente.
dann rufen Sie