Why doesn't Python have static variables?

后端 未结 9 2470
暗喜
暗喜 2020-11-27 14:48

There is a questions asking how to simulate static variables in python.

Also, on the web one can find many different solutions to create static variables. (Though I

9条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-11-27 15:36

    The idea behind this omission is that static variables are only useful in two situations: when you really should be using a class and when you really should be using a generator.

    If you want to attach stateful information to a function, what you need is a class. A trivially simple class, perhaps, but a class nonetheless:

    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()
    

    If you want your function's behavior to change each time it's called, what you need is a generator:

    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()
    

    Of course, static variables are useful for quick-and-dirty scripts where you don't want to deal with the hassle of big structures for little tasks. But there, you don't really need anything more than global — it may seem a but kludgy, but that's okay for small, one-off scripts:

    def foo():
        global bar
        do_stuff(bar)
    
    foo()
    foo()
    

提交回复
热议问题