Static variables [was Re: syntax difference]

Bart bart at 1
Sat Jun 23 18:43:56 EDT 2018


  To: Stefan Ram
From: "Bart" <bart at 1:261/38.remove-r7u-this>

  To: Stefan Ram
From: Bart <bc at freeuk.com>

On 23/06/2018 14:32, Stefan Ram wrote:
> ram at zedat.fu-berlin.de (Stefan Ram) writes:
>> def f():
>>     def g():
>>         g.x += 1
>>         return g.x
>>     g.x = 0
>>     return g
>
>    Or, "for all g to share the same x":
>
>    main.py
>
> def f():
>      def g():
>          f.x += 1
>          return f.x
>      return g
> f.x = 0

OK, problem solved: we just use attributes of function objects rather than
locally static variables (I didn't even know that was possible). These
apparently can be created, accessed and modified from anywhere in the program.

The only provisos are that functions with 'static' must be written as nested
functions and the name of the function must be returned via the enclosing
function in some setup code.

The initialising of the static is showed as happening in global space in your
example, but may be possible to move that to the enclosing function. (For
example, when the static data is a local table.)

However, here's a reminder of what the feature looks like implemented properly:

     def g()
         static x = 0
         x += 1
         return x

     print (g())

No set up of g needed. 'static' can be added to any existing function without
changing how its used. And it can be removed without having to dismantled all
the extra machinery.

/And/ the access to x inside g() can be a fast local lookup not an
attribute lookup (unless implemented on top of global variables).

--
bart

-+- BBBS/Li6 v4.10 Toy-3
 + Origin: Prism bbs (1:261/38)

--- BBBS/Li6 v4.10 Toy-3
 * Origin: Prism bbs (1:261/38)



More information about the Python-list mailing list