Newbie asks about static variables...

Emile van Sebille emile at fenx.com
Tue May 4 21:17:41 EDT 1999


Being also new at Python, doesn't your example follow the example from
section 4.7 of the tutorial?

Why is this *evil*?  It's right there in the tutorial.  </aside - I really
do believe everything I read> What is Guido not saying? What are the
dangers?  Where is the case study?

</start paste from section 4.7>
Important warning: The default value is evaluated only once. This makes a
difference when the default is a mutable object such as a list or
dictionary. For example, the following function accumulates the arguments
passed to it on subsequent calls:


def f(a, l = []):
    l.append(a)
    return l
print f(1)
print f(2)
print f(3)

This will print


[1]
[1, 2]
[1, 2, 3]

If you don't want the default to be shared between subsequent calls, you can
write the function like this instead:


def f(a, l = None):
    if l is None:
        l = []
    l.append(a)

</end paste>

trying-my-best-to-keep-up-and-make-sense-of-it-all-ly y'rs

Emile van Sebille
emile at fenx.com
-------------------


Evan Simpson <evan at tokenexchange.com> wrote in message
news:8sHX2.66$eD1.21692 at news.corridex.com...
> If you *really*, *really* want a function-private static, you could write
> this:
>
> def killParrot(no_of_calls=[0]):
>     # do stuff
>     print "Number of calls is %d" % no_of_calls[0]
>     no_of_calls[0] = no_of_calls[0] + 1
>
> >>> killParrot()
> Number of calls is 0
> >>> killParrot()
> Number of calls is 1
> >>>
>
> This is also a case study in the dangers of mutable default parameters.
>
> I wouldn't normally mention a wierd idiom like this in the presence of a
> newbie, but I'm feeling evil.
>
> with-a-stomach-flu-and-in-the-mood-to-spread-the-suffering-ly y'rs
> Evan Simpson
>






More information about the Python-list mailing list