So fügen Sie Funktionen hinzu

8

Ich habe überall nachgesehen, aber es ist ein schweres Thema, ohne viel Lärm zu suchen. Ich möchte so etwas machen:

%Vor%

Aber ich bekomme Fehler bei der Zuweisung zur Cube-Funktion wie:

%Vor%

Gibt es in Python keine Funktionsalgebra oder mache ich nur einen dummen Fehler?

edit: viel später las ich Pythons offizielles Intro zur funktionalen Programmierung ( Ссылка ) und in Richtung der unten bezieht es sich auf ein Paket von Drittanbietern "funktional" ( Ссылка ), das Funktionen zusammenstellen kann, dh:

%Vor%     
user318904 04.11.2010, 20:49
quelle

6 Antworten

6

Ich glaube nicht, dass Sie das tun können. Mit der __call__ magic-Methode können Sie jedoch eine eigene aufrufbare Klasse definieren, die als Funktion fungiert und für die Sie % __add__ definieren können:

%Vor%

Hier wird + auf punktweise Addition und * auf Komposition überladen. Natürlich können Sie alles tun, was Sie wollen.

Interessante Frage für die Python-Gurus: Warum funktioniert das Folgende nicht (dreckiger Hack, obwohl es ist)?

%Vor%     
katrielalex 04.11.2010, 21:09
quelle
1

Ich denke, was Sie vorhaben, ist:

%Vor%     
Ross Light 04.11.2010 20:52
quelle
1

In Ihrem Code muss f eine Klasse und keine Funktion sein. Wenn Sie eine Klasse haben, können Sie eine Methode hinzufügen (self, other) implementieren, die den Operator + überlädt.

    
Alex 04.11.2010 21:15
quelle
1

Nun, ich denke, ich habe etwas interessantes, um Funktionen hinzuzufügen. Es geht um Lambda-Funktion und es könnte Ihr Problem beheben. Zumindest hat es meiner behoben:

%Vor%

und für diejenigen, die daran interessiert sind, Parameter zu übergeben

%Vor%     
Raoulinet 18.01.2013 09:51
quelle
1

Ein bisschen spät, aber diese Art von Algebra kann leicht mit Lambda-Funktionen durchgeführt werden:

%Vor%

(f und g müssen keine Lambda-Funktionen sein)

Sie können damit alle möglichen interessanten Dinge tun. Angenommen, Sie möchten die Funktion f(x) = 1 + x + x**2 + ... + x**n für eine gegebene n definieren. Sie können tun:

%Vor%

Um zu verstehen, warum ich das Lambda so gemacht habe ( lambda x, j = i + 1, k = f: ) ist es besser das zu lesen: Ссылка

Lange Rede, kurzer Sinn: Die Parameter in einer Lambda-Funktion haben keine lokale Kopie. Wenn ich i aus der Schleife wie in lambda x, k = f: k(x) + x**(i + 1) verwendet hätte, hätten wir die Funktion f(x) = 1 + x**3 + x**3 + x**3 gehabt.

    
Andrés 06.05.2016 10:14
quelle
-2

Schritt 1. Lesen Sie dies. Ссылка

Schritt 2. Lesen Sie dies. Ссылка )

Schritt 3. Lesen Sie dies. Ссылка )

Dies ist nicht der ideale Ort für Python.

    
S.Lott 04.11.2010 21:15
quelle