Zweck der Funktion ohne Klammern python aufrufen

7

Betrachten Sie Folgendes:

%Vor%

Dieser Code gibt

zurück %Vor%

Da get_value eine Funktion ist, würde ich erwarten, dass die Ausführung stoppt und einen Fehler zurückgibt, aber das tut es nicht. Kann jemand erklären, warum der Python-Interpreter diese Syntax erlaubt, anstatt einen Attributfehler zu erzeugen, was mir in meinem Fall wertvolle Zeit erspart hätte.

    
user3311142 14.02.2014, 17:37
quelle

4 Antworten

12

Wie bereits erwähnt, sind Funktionen und Methoden erstklassige Objekte. Sie rufen sie auf, indem Sie einige Klammern (Klammern) an das Ende werfen. Aber es sieht so aus, als würdest du mehr Motivation dafür haben wollen, warum Python uns das sogar erlaubt. Warum sollte es uns interessieren, ob Funktionen erstklassig sind oder nicht?

Manchmal möchten Sie sie nicht aufrufen, Sie möchten einen Verweis auf die aufrufbare Funktion selbst übergeben.

%Vor%

Wenn Sie Klammern nach dem obigen setzen, wird Ihr my_long_running_function in Ihrem Haupt-Thread ausgeführt. kaum was du wolltest! Sie wollten Process einen Verweis auf Ihre Callable geben, dass es sich in einem neuen Prozess selbst ausführen wird.

Manchmal möchten Sie nur das Callable angeben und etwas anderes lassen ...

%Vor%

( map in diesem Fall) füllen Sie seine Argumente.

Vielleicht möchten Sie nur ein paar Aufrufer in eine Sammlung fallen lassen und die gewünschte dynamisch holen.

%Vor%

Das obige ist eine Möglichkeit, String-Repräsentationen von Operatoren auf ihre tatsächliche Aktion abzubilden.

    
roippi 14.02.2014, 18:08
quelle
13

Funktionen und Methoden in Python sind auch Objekte selbst. So können Sie sie genau wie jedes andere Objekt vergleichen.

%Vor%

Normalerweise würden Sie natürlich keine Methoden miteinander vergleichen oder irgendetwas anderes, weil es nicht besonders nützlich ist. Ein Ort, der nützlich ist, wenn Sie eine Funktion in eine andere Funktion übergeben möchten.

    
Mark Ransom 14.02.2014 17:39
quelle
3
%Vor%

1) Ist der Rückgabewert von a.get_value () gleich der Methode b.get_value?

2) Gibt a.get_value () dasselbe zurück wie b.get_value ()?

3) Ist die Methodenreferenz a.get_value gleich der Methodenreferenz b.get_value?

Dies ist absolut gültig Python:)

    
Morten Jensen 14.02.2014 17:42
quelle
1
%Vor%     
dimka665 14.02.2014 18:13
quelle

Tags und Links