另外,在网上可以找到许多创建静态变量的解决方案。(尽管我还没有看到我喜欢的一个。)
为什么Python不支持方法中的静态变量?这被认为是非Python的,还是与Python的语法有关?
编辑:
我专门询问了 为什么 进行设计决策,但我没有提供任何代码示例,因为我想避免解释来模拟静态变量。
忽略这一点的想法是,静态变量仅在以下两种情况下才有用:何时真正应该使用类以及何时真正应该使用生成器。
如果要将状态信息附加到函数,则需要一个类。也许是一个简单的类,但是仍然是一个类:
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就可以了,这看起来似乎有点笨拙,但是对于小的一次性脚本来说,这是可以的:
global
def foo(): global bar do_stuff(bar) foo() foo()