To: Bart From: Ben Bacarisse <ben.use...@bsb.me.uk> Bart <b...@freeuk.com> writes:
> On 23/06/2018 21:13, Chris Angelico wrote: >> On Sat, Jun 23, 2018 at 10:41 PM, Bart <b...@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. --- BBBS/Li6 v4.10 Toy-3 * Origin: Prism bbs (1:261/38) -- https://mail.python.org/mailman/listinfo/python-list