L'idea alla base di questa omissione è che le variabili statiche sono utili solo in due situazioni: quando si dovrebbe realmente usare una classe e quando si dovrebbe usare un generatore.
Se si desidera allegare informazioni di stato a una funzione, ciò di cui si ha bisogno è una classe. Una classe banalmente semplice, forse, ma una classe comunque:
def foo(bar):
static my_bar # doesn't work
if not my_bar:
my_bar = bar
do_stuff(my_bar)
foo(bar)
foo()
# -- becomes ->
class Foo(object):
def __init__(self, bar):
self.bar = bar
def __call__(self):
do_stuff(self.bar)
foo = Foo(bar)
foo()
foo()
Se si desidera il comportamento del vostro funzione per cambiare ogni volta che si chiama, quello che ti serve è un generatore:
def foo(bar):
static my_bar # doesn't work
if not my_bar:
my_bar = bar
my_bar = my_bar * 3 % 5
return my_bar
foo(bar)
foo()
# -- becomes ->
def foogen(bar):
my_bar = bar
while True:
my_bar = my_bar * 3 % 5
yield my_bar
foo = foogen(bar)
foo.next()
foo.next()
Naturalmente, statica le variabili sono utili per script veloci e sporchi in cui non si desidera gestire la seccatura di grandi strutture per piccole attività. Ma c'è, non si ha realmente bisogno di qualcosa di più di global
- se può sembrare un ma kludgy, ma va bene per i piccoli, una tantum script:
def foo():
global bar
do_stuff(bar)
foo()
foo()
fonte
2009-02-27 00:04:02
cosa non andava con le risposte alle http://stackoverflow.com/questions/460586/simulating-a-local-static-variable-in -pitone? Perché ri-chiedere la domanda? –
Non ho chiesto esplicitamente come simularlo, ma quale sia la ragione di questa decisione. –