Hallo,
ist es moeglich innerhalb einer Funktion herauszufinden, wieviele Argumente uebergeben wurden?
Gruesse
Pytoniac
Funktionsargumente zaehlen
Meinst du so?
Code: Alles auswählen
>>> def test(*para):
print type(para)
print len(para)
print para
>>> test(1, 2, "hallo")
<type 'tuple'>
3
(1, 2, 'hallo')
Genau, allerdings mit einer Funktion, welche so aussieht:
Was bewirkt denn dieser Stern am Anfang der Variable, in der Funktion?
Code: Alles auswählen
def test(arg1, arg2, arg3):
Code: Alles auswählen
>>> def test(arg1, arg2, arg3):
... return "foo"
...
>>> test.func_code.co_argcount
3
Alternativ ginge noch:
Code: Alles auswählen
>>> import inspect
>>> inspect.getargspec(test)
ArgSpec(args=['arg1', 'arg2', 'arg3'], varargs=None, keywords=None, defaults=None)
>>> len(inspect.getargspec(test).args)
3
Dem zweiten Beitrag des OP hatte ich entnommen, dass er anscheinend nicht die übergebene Anzahl meint, sondern die Anzahl an Argumenten in der Funktionssignatur. Aber ehrlich gesagt hatte ich danach gar nicht mehr auf den Threadtitel geachtet...sparrow hat geschrieben:@snafu das zählt aber die Parameter, die die Funktion erwartet, nicht die übergebenen, oder? Deshalb dachte ich eigentlich, dass Pytoniac die dynamischen Parameter meint.

@Pytoniac: das * heißt, dass eine dynamische Anzal von Parametern übergeben werden kann. Für mich ist das der einzige sinnvolle Grund die Parameter zu zählen. Wenn die Anzahl eh fest definiert ist, macht es ja keinen Sinn in der Funktion zu schauen wieviele es sind. Es sind nämlich immer alle.
Ansonst: zeig was du machen willst und wofür du das brauchst. Klingt nämlich sehr seltsam.
Ansonst: zeig was du machen willst und wofür du das brauchst. Klingt nämlich sehr seltsam.
Dann vielleicht nochmal direkt auf den Beitrag antwortend:
Oder willst du *vor* dem Funktionsaufruf wissen, was der Aufrufer vorhat? Weil der Funktionsaufruf an sich findet wie gesagt nur statt, wenn die Anzahl an Argumenten der Funktionssignatur entspricht. Andernfalls wird die Funktion gar nicht erst betreten.
Ein Funktionskopf, wie du ihn gezeigt hast, kann definitiv nur exakt 3 Argumente annehmen. Was willst du da noch zählen? Eine variable Anzahl von Argumenten ist nur mit den gezeigten Stern davor möglich.Pytoniac hat geschrieben:allerdings mit einer Funktion, welche so aussieht:
Was bewirkt denn dieser Stern am Anfang der Variable, in der Funktion?Code: Alles auswählen
def test(arg1, arg2, arg3):
Oder willst du *vor* dem Funktionsaufruf wissen, was der Aufrufer vorhat? Weil der Funktionsaufruf an sich findet wie gesagt nur statt, wenn die Anzahl an Argumenten der Funktionssignatur entspricht. Andernfalls wird die Funktion gar nicht erst betreten.
@Pytoniac: Damit sollte man IMHO übrigens sparsam umgehen und es zum Beispiel nicht verwenden wenn man statt dessen auch tatsächlich eine Liste übergeben könnte.