当前位置:  开发笔记 > 编程语言 > 正文

Python有像Perl 5.10的"状态"变量吗?

如何解决《Python有像Perl5.10的"状态"变量吗?》经验,为你挑选了5个好方法。

在Perl 5.10中,我可以说:

sub foo () {
  state $x = 1;
  say $x++;
}

foo();
foo();
foo();

......它会打印出来:

1
2
3

Python有这样的东西吗?



1> Ali Afshar..:

一个类可能更适合这里(并且通常更适合涉及"状态"的任何事情):

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



2> Triptych..:

最接近的并行可能是将值附加到函数本身.

def foo():
    foo.bar = foo.bar + 1

foo.bar = 0

foo()
foo()
foo()

print foo.bar # prints 3



3> 小智..:

Python有一些类似的生成器:

"yield"关键字在Python中的作用是什么?



4> hasen..:

不确定这是否是您正在寻找的,但是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中有什么作用?



5> popcnt..:

这是在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邮件列表帖子中逐字借用了这个例子.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有