Seite 1 von 1
Übergabeparameter als Liste, geht das?
Verfasst: Sonntag 29. Juli 2018, 12:35
von danilani
Hallo ich habe eine schnelle Frage die ich leider nicht in Google gefunden habe.
Ich habe einfach Funktion z.B:
wenn ich diese aufrufe muss ich ja 4 Parameter übergeben also z.b. so:
In Python geht aber doch auch so eine zuweisung:
.
Wenn ich jetzt also folgendes mache z.b.:
und mit
z dann die Funktion aufrufen will so:
geht das nicht xD
Gibt es eine Möglichkeit das die Parameter dann quasi genau wie in der Zuweisung
automatisch richtig erkannt werden und zugeteilt werden.
Ich hoffe ihr wisst was ich mein. Ich frage einfach nur aus Interesse das ganze hat keinen Vorteile für mich ich bin nu am Anfang und es erschien mir logisch das es auch so gehen könnte.
Gruß Dani

Re: Übergabeparameter als Liste, geht das?
Verfasst: Sonntag 29. Juli 2018, 12:49
von nezzcarth
Ja, mit einfachen Positionsargumenten geht das:
Code: Alles auswählen
In [1]: def f(x,y,z):
...: return x + y + z
...:
...:
In [2]: l = [1, 2, 3]
In [3]: f(*l)
Out[3]: 6
Würde ich aber nur in Ausnahmefällen verwenden. Wenn man zusammengehörige Werte wie eine Liste verwenden möchte, passt man die Funktionssignatur entsprechend an und übergibt eine Liste.
Re: Übergabeparameter als Liste, geht das?
Verfasst: Dienstag 31. Juli 2018, 10:58
von Coder94
nezzcarth hat geschrieben: Sonntag 29. Juli 2018, 12:49
Ja, mit einfachen Positionsargumenten geht das:
Code: Alles auswählen
In [1]: def f(x,y,z):
...: return x + y + z
...:
...:
In [2]: l = [1, 2, 3]
In [3]: f(*l)
Out[3]: 6
Würde ich aber nur in Ausnahmefällen verwenden. Wenn man zusammengehörige Werte wie eine Liste verwenden möchte, passt man die Funktionssignatur entsprechend an und übergibt eine Liste.
Das könnte z.B. so aussehen:
Bzw. wenn man es ausführt:
Code: Alles auswählen
>>> def summe(werte: list):
... return sum(werte)
...
>>> test = [1,2,3,4,5]
>>> summe(test)
15
>>>
Re: Übergabeparameter als Liste, geht das?
Verfasst: Dienstag 31. Juli 2018, 11:18
von __blackjack__
`list` ist unnötig restriktiv weil `sum()` jedes iterierbare Objekt nimmt. Typannotationen sind Mist.
Re: Übergabeparameter als Liste, geht das?
Verfasst: Dienstag 31. Juli 2018, 11:46
von DeaD_EyE
__blackjack__ hat geschrieben: Dienstag 31. Juli 2018, 11:18
Typannotationen sind Mist.
An den richtigen Stellen nicht.
Die Meinungen gehen da sehr stark auseinander.
Für Anfänger halte ich das aber auch etwas übertrieben zwanghaft.
Re: Übergabeparameter als Liste, geht das?
Verfasst: Dienstag 31. Juli 2018, 11:51
von kbr
Um type-annotations konsequent zu verwenden, sollte auch der Rückgabewert mit einbezogen werden. Das macht die Sache noch weniger flexibel. Sind Typ-Definitionen bei Cython sinnvoll, so sehe ich den Vorteil bei Python nur selten bis gar nicht.
Re: Übergabeparameter als Liste, geht das?
Verfasst: Dienstag 31. Juli 2018, 12:34
von Coder94
DeaD_EyE hat geschrieben: Dienstag 31. Juli 2018, 11:46
__blackjack__ hat geschrieben: Dienstag 31. Juli 2018, 11:18
Typannotationen sind Mist.
An den richtigen Stellen nicht.
Die Meinungen gehen da sehr stark auseinander.
Für Anfänger halte ich das aber auch etwas übertrieben zwanghaft.
Generell schließe ich mich da gerne an. In diesem Fall war beabsichtigt aufzuzeigen, dass es absolut kein Problem darstellt, eine Liste zu übergeben. Natürlich hätte man das an dieser Stelle auch ohne 'list' machen können.
Aus dem beruflichen Alltag entnehme ich: Am besten so wenig Typannotationen wie möglich. Also wenn immer möglich, darauf verzichten.
Re: Übergabeparameter als Liste, geht das?
Verfasst: Dienstag 31. Juli 2018, 22:32
von bwbg
Typ-Annotationen fallen m. E. in die Kategorie "gut gemeint". Bei den Rückgabewerten sind sie hilfreich zur Dokumentation. Bei Parametern sehe ich sie kritisch, da diese häufig dem Duck-Typing entgegen läuft.
Hier wird eine statische Typprüfung vorgegaukelt, welche weder existiert noch gewollt ist.
Re: Übergabeparameter als Liste, geht das?
Verfasst: Mittwoch 1. August 2018, 00:20
von pillmuncher
@bwbg: Jede Neuerung in einer Sprache sollte ein spezifisches Problem lösen. Typ-Annotationen tun genau das. Sie lösen das Problem, das Python nicht genug wie Java ist. Siehe auch
PEP 572.