[Zope] Persistent variable in Python Script? Is this a feature
or a bug?
Max M
maxm@mxm.dk
Tue, 09 Apr 2002 11:24:01 +0200
iap@y2fun.com wrote:
>Given a Python Script A which only returns an array
>========
>return ('a')
>========
>
>Then call A in another Python Script B with parameter list: b=[]
>
>========
>b.append(container.A())
>return b
>========
>
>Then request B in browser. Guess what happened?
>['a']
>correct!
>But what if you "reload" B again and again?
>You will get
>['a','a','a',........]
>
From the docs:
7.5 Function definitions
Default parameter values are evaluated when the function definition is
executed. This means that the expression is evaluated once, when the
function is defined, and that that same ``pre-computed'' value is used
for each call. This is especially important to understand when a default
parameter is a mutable object, such as a list or a dictionary: if the
function modifies the object (e.g. by appending an item to a list), the
default value is in effect modified. This is generally not what was
intended. A way around this is to use None as the default, and
explicitly test for it in the body of the function, e.g.:
def whats_on_the_telly(penguin=None):
if penguin is None:
penguin = []
penguin.append("property of the zoo")
return penguin
regards Max M