On Fri, May 28, 2021 at 7:28 PM Ronald Oussoren via Python-ideas
<python-ideas@python.org> wrote:
> I honestly don’t see the difference between:
>
> def spam(arg, static=[0]): …
>
> and
>
> _static = 0
> def spam(arg): global _static; …
>
> The difference is where the state is stored. State in the latter example is 
> less tightly coupled to the function and is easier to access externally, but 
> for both cases there is a documented way to access them 
> (spam.__defaults__[’static’] for the first example).  In both cases there’s 
> effectively a singleton object that stores data, which makes testing harder 
> because it is harder to ensure the right preconditions for testing (e.g. some 
> other code might have called the function and affected the function state in 
> an unexpected way).
>

They're not very different if the function is itself global; you'd
have to make sure you don't have a name collision with any other
function that also uses global state, but other than that, they're
basically going to behave the same way.

But if spam() is defined in any other context, it's no longer
equivalent. The default argument is tied to the function object, not
to its surrounding context. You could create five spam() functions in
a loop, and each one has its own static value. You can't do that with
global or nonlocal.

ChrisA
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/QGICZOVK6GHFIXVELX7FUJ6V47KDYAQ3/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to