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 -- http://mail.python.org/mailman/listinfo/python-list