Seite 1 von 1
Zurücksetzen von Funktionsargument
Verfasst: Mittwoch 24. August 2005, 15:17
von mawe
Hi!
Ich steh vermutlich etwas neben mir, aber das versteh ich nicht:
Code: Alles auswählen
In [1]: def func(a, b=[]):
...: if a < 10: b.append(1)
...: return b
...:
In [2]: func(2)
Out[2]: [1]
In [3]: func(2)
Out[3]: [1, 1]
In [4]: func(2)
Out[4]: [1, 1, 1]
Warum wird b nicht jedes mal auf [] zurückgesetzt?
Gruß, verwirrter mawe
Verfasst: Mittwoch 24. August 2005, 16:11
von rayo
soweit ich weiss wird das [] nur einmal bei script start erstellt (wenn er die funktionen einliest). Nacher nimmt er immer die gleiche instanz. bei immutable objekten kein problem (string,zahlen). Jedoch bei listen verherren
Ich hoffe dass ich helfen konnte.
Gruss
Verfasst: Mittwoch 24. August 2005, 16:23
von hehejo
Lies dir das hier durch:
http://docs.python.org/tut/node6.html#S ... 0000000000
Da steht's besser drin, als ich es dir erklären könnte.
Verfasst: Mittwoch 24. August 2005, 19:24
von mawe
Danke euch beiden! Finde das ist ein ärgerliches "Feature"
Verfasst: Donnerstag 25. August 2005, 09:27
von N317V
Oh, super zu wissen! Ich arbeite nämlich viel und gern mit default-Werten. Finde das auch etwas ärgerlich. Was ist denn dann der Sinn von yield? *nochmalnachlesenmuss*
Verfasst: Donnerstag 25. August 2005, 10:12
von hehejo
Mit yield kannst du dir einen Generator bauen.
Code: Alles auswählen
def gen():
for i in xrange(10):
yield(i)
a = gen()
a.next()
for i in a:
print i