static variables
Steven D'Aprano
steve at pearwood.info
Tue Dec 1 20:24:46 EST 2015
On Wed, 2 Dec 2015 12:16 pm, Erik wrote:
> On 02/12/15 01:02, Steven D'Aprano wrote:
>> On Tue, 1 Dec 2015 08:15 pm, Grobu wrote:
>>> # -------------------------------------------------
>>> >>> def test(arg=[0]):
>>> ... print arg[0]
>>> ... arg[0] += 1
>> Awesome!
>
> Hideous!
>
>> using a mutable default as static storage.
>
> Exposing something a caller can override as a local, static, supposedly
> "private" value is IMHO a tad ... ugly? (*)
Heh, I agree, and as I suggested, it might be good to have an actual
mechanism for static locals. But using a class is no better: your "static
storage" is exposed as an instance attribute, and even if you flag it
private, *somebody* is going to mess with it.
A closure works, but that obfuscates the code:
def make_test():
arg = [0]
def test():
print arg[0]
arg[0] += 1
return test
test = make_test()
Or in Python 3:
def make_test():
arg = 0
def test():
nonlocal arg
print arg
arg += 1
return test
test = make_test()
Python has three not-entirely-awful solutions to the problem of static
locals, but no really great or obvious one.
--
Steven
More information about the Python-list
mailing list