Verständnisproblem... Funktion unbestimmte Zahl an Werten ..

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.
Stolzi
User
Beiträge: 155
Registriert: Mittwoch 18. August 2004, 15:44

Verständnisproblem... Funktion unbestimmte Zahl an Werten ..

Beitragvon Stolzi » Freitag 7. September 2007, 19:03

Hi,
komm irgendwie nicht dahinter.
Möchte gerne os.path.join eine unbestimmte Zahl an Ordnern übergeben.
Ich habe die Ordner in einer Liste:

Code: Alles auswählen

List=["Ordner1","Ordner2","Ordner3"]

und möchte diese Ordner von os.path.join verknüpfen lassen. Wie mache ich das? Die Liste übergeben

Code: Alles auswählen

os.path.join(List)

funktioniert natürlich nicht...

Danke
Stolzi
BlackJack

Beitragvon BlackJack » Freitag 7. September 2007, 19:34

Code: Alles auswählen

os.path.join(*Liste)
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Beitragvon schlangenbeschwörer » Freitag 7. September 2007, 19:38

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?
BlackJack

Beitragvon BlackJack » Freitag 7. September 2007, 20:30

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.
Stolzi
User
Beiträge: 155
Registriert: Mittwoch 18. August 2004, 15:44

Beitragvon Stolzi » Samstag 8. September 2007, 09:14

Danke! Würd es nur noch gerne verstehen :-/ Was genau macht denn "*Liste"?

Danke
Stolzi
BlackJack

Beitragvon BlackJack » Samstag 8. September 2007, 09:45

Das Sternchen "entpackt" das "iterable" `Liste` auf die Argumente der Funktion.
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Sonntag 9. September 2007, 11:34

Stolzi hat geschrieben:Danke! Würd es nur noch gerne verstehen :-/ i
http://docs.python.org/ref/calls.html
If 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
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Beitragvon Costi » Sonntag 9. September 2007, 13:55

....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
>>>
cp != mv

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]