retain values between fun calls
George Sakkis
george.sakkis at gmail.com
Sun May 14 00:27:40 EDT 2006
Gary Wessle wrote:
> Hi
>
> the second argument in the functions below suppose to retain its value
> between function calls, the first does, the second does not and I
> would like to know why it doesn't? and how to make it so it does?
>
> thanks
>
> # it does
> def f(a, L=[]):
> L.append(a)
> return L
> print f('a')
> print f('b')
>
>
> # it does not
> def f(a, b=1):
> b = a + b
> return b
> print f(1)
> print f(2)
It's a FAQ:
http://www.python.org/doc/faq/general/#why-are-default-values-shared-between-objects.
Whenever you want to control one or more objects beyond the lifetime of
a single function call, your first thought should be to use a class to
couple behaviour with state:
class SomeFancyClassName(object):
def __init__(self, b=1):
self.b = b
def f(self, a):
self.b += a
return self.b
x = SomeFancyClassName()
print x.f(1)
print x.f(2)
HTH,
George
More information about the Python-list
mailing list