Static variables [was Re: syntax difference]
Ben Bacarisse
ben.usenet at bsb.me.uk
Sat Jun 23 18:25:55 EDT 2018
Bart <bc at freeuk.com> writes:
> On 23/06/2018 21:13, Chris Angelico wrote:
>> On Sat, Jun 23, 2018 at 10:41 PM, Bart <bc at freeuk.com> wrote:
>
>>> (At what point would that happen anyway; if you do this:
>
>> NONE of your examples are taking copies of the function. They all are
>> making REFERENCES to the same function. That is all.
>
> This is about your notion that invocations of the same function via
> different references, should maintain their own versions of the
> function's 'static' data.
>
> Since these references are created via the return g statement here:
>
> def f():
> def g():
> ....
> return g
>
> (say to create function references i and j like this:
>
> i = f()
> j = f()
> )
>
> I'm assuming that something special must be happening. Otherwise, how
> does f() know which reference it's being called via?
>
> What is different, what extra bit of information is provided when f()
> is invoked via i() or j()?
f is not being invoked by either i() or j(). i = f() binds i to the
function returned by f. That's a newly minted function. In languages
like Python, executing def creates a function. In your example, i and j
refer to different functions. If the function temporarily named g has
"own" variables ("static" in C), then each such function should have its
own. That was the point of the example much further up.
The effect can simulated like this:
def make_counter():
def c():
c.x += 1
return c.x
c.x = 0
return c
i = make_counter()
j = make_counter()
print(i(), i(), j(), i())
--
Ben.
More information about the Python-list
mailing list