小编典典

为什么Python没有静态变量?

python

另外,在网上可以找到许多创建静态变量的解决方案。(尽管我还没有看到我喜欢的一个。)

为什么Python不支持方法中的静态变量?这被认为是非Python的,还是与Python的语法有关?

编辑:

我专门询问了 为什么 进行设计决策,但我没有提供任何代码示例,因为我想避免解释来模拟静态变量。


阅读 166

收藏
2020-12-20

共1个答案

小编典典

忽略这一点的想法是,静态变量仅在以下两种情况下才有用:何时真正应该使用类以及何时真正应该使用生成器。

如果要将状态信息附加到函数,则需要一个类。也许是一个简单的类,但是仍然是一个类:

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

如果您希望函数的行为在每次调用时都发生变化,则需要一个生成器:

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

当然,静态变量
快速和肮脏的脚本,让你不想处理大结构的小任务的麻烦有用。但是在那儿,您实际上只需要什么global就可以了,这看起来似乎有点笨拙,但是对于小的一次性脚本来说,这是可以的:

def foo():
    global bar
    do_stuff(bar)

foo()
foo()
2020-12-20