Path: csiph.com!eternal-september.org!feeder.eternal-september.org!mx02.eternal-september.org!.POSTED!not-for-mail From: Marko Rauhamaa Newsgroups: comp.lang.python Subject: Re: static variables Date: Wed, 02 Dec 2015 12:18:56 +0200 Organization: A noiseless patient Spider Lines: 31 Message-ID: <87a8ptcfvz.fsf@elektro.pacujo.net> References: <565cf163$0$1612$c3e8da3$5496439d@news.astraweb.com> <565e4329$0$1612$c3e8da3$5496439d@news.astraweb.com> <565e4861$0$1587$c3e8da3$5496439d@news.astraweb.com> <565EAA1D.501@rece.vub.ac.be> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: mx02.eternal-september.org; posting-host="b7cb1518d23ec19d482dcc9c31d30fdd"; logging-data="17609"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/SpgilNGfzPk8Mvrvx0lhr" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) Cancel-Lock: sha1:O+MTNCtJUysCWaPiv5mBLhNEdOU= sha1:ueCh+GBYQPzXiFpZ+ghv9BclKGs= Xref: csiph.com comp.lang.python:99864 Antoon Pardon : > def foo() > foo.attr > > changes nothing about foo.attr being globally accessible. I don't know why global accessibility is such a problem. Anyway, in practice I handle such "static" variables as module globals. If you want a more puristic solution, you could do: def _make_f(): x = 0 def f(): nonlocal x x += 1 return x return f f = _make_f() print(f()) => 1 print(f()) => 2 print(f()) => 3 Marko