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