Static variables [was Re: syntax difference]
From: "Ben Bacarisse" <ben.bacarisse at 1:261/38.remove-ij1-this>
From: Ben Bacarisse <ben.usenet at bsb.me.uk>
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:
c.x += 1
c.x = 0
i = make_counter()
j = make_counter()
print(i(), i(), j(), i())
-+- BBBS/Li6 v4.10 Toy-3
+ Origin: Prism bbs (1:261/38)
--- BBBS/Li6 v4.10 Toy-3
* Origin: Prism bbs (1:261/38)