Funktionsaufruf mit zwei Klammern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
NWA
User
Beiträge: 38
Registriert: Mittwoch 3. Februar 2021, 11:40

Hallo,

ich bin auf einen Funktionsaufruf gestossen. den ich nicht verstehe. Bei der Recherche zu dem Problem bekomme ich leider keine Lösung.

Folgender Code:

Code: Alles auswählen

def function1(arg1):
	...

antwort = function1(arg1: "Text")(**params)
Wofür kann man die zweite Klammer verwenden?
Benutzeravatar
pillmuncher
User
Beiträge: 1529
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Funktionen sind in Python Objekte, wie alles andere auch. Deswegen kann man Funktionen auch herumreichen:

Code: Alles auswählen

>>> def foo(f):
...     f(123)
... 
>>> foo(print)
123
Man kann auch Funktionen als Rückgabewert haben:

Code: Alles auswählen

>>> def bar():
...     return print
... 
>>> b = bar()
>>> b(234)
234
Und man braucht den Rückabewert nicht einer Variablen zuzuweisen, sondern man kann ihn direkt verwenden:

Code: Alles auswählen

>>> bar()(234)
234
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
Dennis89
User
Beiträge: 1517
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

der Teil mit `arg1: "Text"` ist doch syntaktisch falsch? Die Annotation gehört doch, wenn, in die Funktion, also `def funtion1(arg1: str)` und der Aufruf, dann eher `function1(arg1="Text")` oder?

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
NWA
User
Beiträge: 38
Registriert: Mittwoch 3. Februar 2021, 11:40

@pillmuncher

Vielen Dank für deine netten Beispiele. Ich habe jetzt das Prinzip verstanden.

@Dennis
Hast natürlich recht. Hatte den Fehler nicht bemerkt...
Antworten