Seite 1 von 1
Verständnisproblem... Funktion unbestimmte Zahl an Werten ..
Verfasst: Freitag 7. September 2007, 19:03
von Stolzi
Hi,
komm irgendwie nicht dahinter.
Möchte gerne os.path.join eine unbestimmte Zahl an Ordnern übergeben.
Ich habe die Ordner in einer Liste:
und möchte diese Ordner von os.path.join verknüpfen lassen. Wie mache ich das? Die Liste übergeben
funktioniert natürlich nicht...
Danke
Stolzi
Verfasst: Freitag 7. September 2007, 19:34
von BlackJack
Verfasst: Freitag 7. September 2007, 19:38
von schlangenbeschwörer
ansonsten könnt man's sich auch selber basteln...
Code: Alles auswählen
def join_(l):
p = ""
while len(l):
p = j(p, l.pop(0))
return p
Gehts auch als Einzeiler? Eher nicht, oder?
Verfasst: Freitag 7. September 2007, 20:30
von BlackJack
Es geht natürlich (noch) als Einzeiler:
Code: Alles auswählen
In [54]: reduce(os.path.join, ['a', 'b', 'c'])
Out[54]: 'a/b/c'
Hat aber beides den Nachteil das `os.path.join()` mehrfach aufgerufen wird und immer Pfade als Zwischenergebnisse entstehen.
Verfasst: Samstag 8. September 2007, 09:14
von Stolzi
Danke! Würd es nur noch gerne verstehen :-/ Was genau macht denn "*Liste"?
Danke
Stolzi
Verfasst: Samstag 8. September 2007, 09:45
von BlackJack
Das Sternchen "entpackt" das "iterable" `Liste` auf die Argumente der Funktion.
Verfasst: Sonntag 9. September 2007, 11:34
von Joghurt
Stolzi hat geschrieben:Danke! Würd es nur noch gerne verstehen :-/ i
http://docs.python.org/ref/calls.htmlIf the syntax "*expression" appears in the function call, "expression" must evaluate to a sequence. Elements from this sequence are treated as if they were additional positional arguments; if there are postional arguments x1,...,xN , and "expression" evaluates to a sequence y1,...,yM, this is equivalent to a call with M+N positional arguments x1,...,xN,y1,...,yM.
Code: Alles auswählen
>>> a = [1,2,3] # oder auch (1,2,3)
>>> foo(*a) # identisch mit foo(1,2,3)
>>> #oder auch
>>> foo(*(1,2,3)) # Wenngleich das auch ziemlich sinnlos ist
Verfasst: Sonntag 9. September 2007, 13:55
von Costi
....und ugekehrt kann eine funktion auch den sternchen benutzen um alle gegebenen argumente einzusameln:
Code: Alles auswählen
>>> def foo(*args):
return args[0] + args[-1]
>>> foo(1,2,3,4)
5
>>> foo('foo','s', 'bar')
'foobar'
>>> foo(*xrange(100000))
99999
>>>