Python: Definition meiner eigenen Operatoren?
Möchte ich definieren, meine eigenen Betreiber. Macht python so etwas unterstützen?
Gut, Sie könnte ein Betreiber, der nicht definiert ist (wie
$
) und verwenden Sie dann einige python-code zu Bearbeiten, sich (mit open
) und ändern Sie alle a $ b
zu function(a,b)
InformationsquelleAutor cwj | 2009-05-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, Sie können nicht erstellen, neue Betreiber. Allerdings, wenn Sie nur das auswerten von Ausdrücken, Sie konnte den string selbst und berechnen Sie die Ergebnisse der neuen Betreiber.
InformationsquelleAutor Zifre
Zwar technisch Sie nicht der Definition von neuen Operatoren in Python clever hack diese Einschränkung umgeht. Es erlaubt die Definition von infix-Operatoren wie diese:
Es könnte ein interessanter hack, aber ich glaube nicht, dass dies eine gute Lösung. Python erlaubt es nicht, eigene Operatoren, eine design-Entscheidung wurde gemacht aus einem guten Grund und Sie sollten es annehmen, anstatt sehen dies als ein problem und erfinden Wege, um es. Es ist nicht eine gute Idee, um den Kampf gegen die Sprache, die Sie schreiben den code in. Wenn Sie wirklich wollen, sollten Sie eine andere Sprache.
Ich konnte nicht widersprechen mehr. Wir sind nicht alle frei zu wählen, eine Sprache bewusst. Auf der anderen Seite, sehe ich nicht, warum sollte ich mich mit jemand anderes ' s design-Entscheidungen, wenn ich nicht zufrieden bin. - Ausgezeichnete hack in der Tat!
Finden Sie die infix-Paket: pypi.python.org/pypi/infix
Ich nur in Verbindung mit
pipe
austoolz
.pip = Infix(lambda x,y: pipe(x,y))
. dann8 |pip| range |pip| sum |pip| range
. scheint zu funktionieren.InformationsquelleAutor Ayman Hourieh
Nein, Python kommt mit einem vordefinierten, aber überschreibbare, Satz von Operatoren.
dfply
verwendet eine-->
operator: towardsdatascience.com/...Soweit ich das beurteilen kann, ist es nicht (siehe docs). Das Beispiel in diesem Beitrag verwendet
-->
zu sein scheint psuedocode. Die Bibliothek selbst nur überlastungen>>
.InformationsquelleAutor dfa
Wenn Sie anwenden möchten, den Betrieb auf eine bestimmte Klasse von Objekten, können Sie einfach überschreiben die Betreiber entsprechend Ihrer Funktion die nächsten... zum Beispiel, indem
__eq__()
wird, überschreiben die==
Betreiber zurückgeben, was Sie wollen. Dies funktioniert für fast alle Betreiber.InformationsquelleAutor Sudhir Jonathan
Sage bietet diese Funktionalität, im wesentlichen mit der "clever hack" beschrieben von @Ayman Hourieh, aber eingebaut in ein Modul als Dekorateur zu geben, ein cleaner Optik und zusätzliche Funktionen – Sie können wählen Sie den operator zu überladen und daher ist die Reihenfolge der Auswertung.
Sehen die Salbei-Dokumentation und diese Verbesserung-tracking-ticket für weitere Informationen.
InformationsquelleAutor billyjmc
Python 3.5 stellt das symbol
@
für eine extra-Betreiber.PEP465 der Einführung dieser neuen operator zur matrix-Multiplikation, um eine Vereinfachung der notation, die von vielen numerischen code. Der Betreiber wird nicht umgesetzt werden für alle Typen, sondern nur für arrays wie Objekte.
Unterstützen Sie den operator für Ihre Klassen/Objekte durch die Implementierung
__matmul__()
.PEP lässt Raum für eine unterschiedliche Nutzung der Betreiber für nicht-arrays wie Objekte.
Natürlich können Sie die Umsetzung mit
@
jede Art der operation unterscheidet sich von matrix-Multiplikation auch für array-ähnliche Objekte, aber die Benutzer-Erfahrung betroffen sein werden, weil jeder damit rechnen, dass Ihre Daten Art zu Verhalten in einer anderen Art und Weise.@
ist ein neuer operator-symbol? Oder dass wir irgendwie können es verwenden, um zu definieren, neue Betreiber unserer eigenen?Ja, @ ist ein neuer operator-symbol. Ja, Sie können es verwenden, um zu definieren Operationen auf den Objekten. Lesen Sie die PEP465.
Er meinte nur, dass
@
ist einen neuen Betreiber. Das ist es. Die Tatsache bleibt: Sie können nicht definieren, Betreiber Ihrem eigenen in Python.InformationsquelleAutor gg349