Static variables [was Re: syntax difference]

Ben Bacarisse ben.usenet at bsb.me.uk
Sat Jun 23 20:53:59 EDT 2018


Bart <bc at freeuk.com> writes:

> On 23/06/2018 23:25, Ben Bacarisse wrote:
>> 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.
>
> Do you mean that if the same 'def' block is re-executed, it will
> create a different instance of the function? (Same byte-code, but a
> different set of everything else the function uses.)

Logically, yes.

> Wow. (Just think of all the times you write a function containing a
> neat bunch of local functions, every time it's called it has to create
> a new function instances for each of those functions, even if they are
> not used.)

I am surprised that this surprises you, and equally surprised that you
seem to think it's going to be in some way grossly inefficient.

-- 
Ben.



More information about the Python-list mailing list