Seite 1 von 1

Funktionsargumente zaehlen

Verfasst: Montag 10. September 2012, 13:56
von Pytoniac
Hallo,

ist es moeglich innerhalb einer Funktion herauszufinden, wieviele Argumente uebergeben wurden?

Gruesse
Pytoniac

Re: Funktionsargumente zaehlen

Verfasst: Montag 10. September 2012, 14:01
von sparrow
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')

Re: Funktionsargumente zaehlen

Verfasst: Montag 10. September 2012, 14:05
von Pytoniac
Genau, allerdings mit einer Funktion, welche so aussieht:

Code: Alles auswählen

def test(arg1, arg2, arg3):
Was bewirkt denn dieser Stern am Anfang der Variable, in der Funktion?

Re: Funktionsargumente zaehlen

Verfasst: Montag 10. September 2012, 14:18
von snafu

Code: Alles auswählen

>>> def test(arg1, arg2, arg3):
...     return "foo"
... 
>>> test.func_code.co_argcount
3
Das ist aber meistens nichts, was man wirklich will. Zudem bin ich nicht sicher, wie portabel diese Herangehensweise ist.

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
In welchem Zusammenhang brauchst du das denn?

Re: Funktionsargumente zaehlen

Verfasst: Montag 10. September 2012, 14:26
von sparrow
@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.

Re: Funktionsargumente zaehlen

Verfasst: Montag 10. September 2012, 14:33
von snafu
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.
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... :oops:

Re: Funktionsargumente zaehlen

Verfasst: Montag 10. September 2012, 14:40
von sparrow
@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.

Re: Funktionsargumente zaehlen

Verfasst: Montag 10. September 2012, 14:41
von snafu
Dann vielleicht nochmal direkt auf den Beitrag antwortend:
Pytoniac hat geschrieben:allerdings mit einer Funktion, welche so aussieht:

Code: Alles auswählen

def test(arg1, arg2, arg3):
Was bewirkt denn dieser Stern am Anfang der Variable, in der Funktion?
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.

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.

Re: Funktionsargumente zaehlen

Verfasst: Mittwoch 12. September 2012, 08:41
von Pytoniac
Ich wusste vorher nicht, dass es "*args" gibt. Genau das habe ich gesucht... Danke!

Re: Funktionsargumente zaehlen

Verfasst: Mittwoch 12. September 2012, 12:32
von BlackJack
@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.