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

Zurücksetzen von Funktionsargument

Beitragvon mawe » Mittwoch 24. August 2005, 15:17

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:

Beitragvon rayo » Mittwoch 24. August 2005, 16:11

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

Beitragvon hehejo » Mittwoch 24. August 2005, 16:23

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
ascii stupid question,
get stupid ansii

http://www.hehejo.de
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Mittwoch 24. August 2005, 19:24

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

Beitragvon N317V » Donnerstag 25. August 2005, 09:27

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

Beitragvon hehejo » Donnerstag 25. August 2005, 10:12

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

ascii stupid question,
get stupid ansii


http://www.hehejo.de

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]