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 :D

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