在Perl 5.10中,我可以说:
sub foo () {
state $x = 1;
say $x++;
}
foo();
foo();
foo();
Run Code Online (Sandbox Code Playgroud)
......它会打印出来:
1
2
3
Run Code Online (Sandbox Code Playgroud)
Python有这样的东西吗?
Ali*_*har 17
一个类可能更适合这里(并且通常更适合涉及"状态"的任何事情):
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()
Run Code Online (Sandbox Code Playgroud)
Tri*_*ych 12
最接近的并行可能是将值附加到函数本身.
def foo():
foo.bar = foo.bar + 1
foo.bar = 0
foo()
foo()
foo()
print foo.bar # prints 3
Run Code Online (Sandbox Code Playgroud)
不确定这是否是您正在寻找的,但是python的生成器函数本身不返回值,而是每次都生成新值的生成器对象
def gen():
x = 10
while True:
yield x
x += 1
Run Code Online (Sandbox Code Playgroud)
用法:
>>> a = gen()
>>> a.next()
10
>>> a.next()
11
>>> a.next()
12
>>> a.next()
13
>>>
Run Code Online (Sandbox Code Playgroud)
在这里查看有关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
Run Code Online (Sandbox Code Playgroud)
我从python邮件列表帖子中逐字借用了这个例子.
| 归档时间: |
|
| 查看次数: |
1200 次 |
| 最近记录: |