在Perl 5.10中,我可以说:
sub foo () { state $x = 1; say $x++; } foo(); foo(); foo();
......它会打印出来:
1 2 3
Python有这样的东西吗?
一个类可能更适合这里(并且通常更适合涉及"状态"的任何事情):
class Stateful(object): def __init__(self): self.state_var = 0 def __call__(self): self.state_var = self.state_var + 1 print self.state_var foo = Stateful() foo() foo()
最接近的并行可能是将值附加到函数本身.
def foo(): foo.bar = foo.bar + 1 foo.bar = 0 foo() foo() foo() print foo.bar # prints 3
Python有一些类似的生成器:
"yield"关键字在Python中的作用是什么?
不确定这是否是您正在寻找的,但是python的生成器函数本身不返回值,而是每次都生成新值的生成器对象
def gen(): x = 10 while True: yield x x += 1
用法:
>>> a = gen() >>> a.next() 10 >>> a.next() 11 >>> a.next() 12 >>> a.next() 13 >>>
在这里查看有关yield的更多解释:
"yield"关键字在Python中有什么作用?
这是在python中实现闭包的一种方法:
def outer(): a = [4] def inner(): print a[0] a[0] = a[0] + 1 return inner fn = outer() fn() # => 4 fn() # => 5 fn() # => 6
我从python邮件列表帖子中逐字借用了这个例子.