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

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
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

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

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

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

Danke
Stolzi
BlackJack

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

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: 545
Registriert: Donnerstag 17. August 2006, 14:21

....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
Antworten