Zurücksetzen von Funktionsargument

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
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

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
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

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
hehejo
User
Beiträge: 56
Registriert: Freitag 18. Februar 2005, 18:24
Wohnort: Stein
Kontaktdaten:

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.
Gruß, Johannes
[b][color=red]ascii stupid question,
get stupid ansii[/color][/b]
[url]http://www.hehejo.de[/url]
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Danke euch beiden! Finde das ist ein ärgerliches "Feature" :?
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

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*
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
hehejo
User
Beiträge: 56
Registriert: Freitag 18. Februar 2005, 18:24
Wohnort: Stein
Kontaktdaten:

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
Gruß, Johannes
[b][color=red]ascii stupid question,
get stupid ansii[/color][/b]
[url]http://www.hehejo.de[/url]
Antworten