每天一个小程序--python编译pyc文件
每天一个小程序--Qt结合Designer快速进行快发

每天一个小程序--在python的类和函数中使用静态变量

pingf posted @ Mon, 01 Nov 2010 11:06:43 -1100 in 未分类 , 2945 readers

在python的类和函数(包括λ方法)中使用静态变量似乎是件不可能[Nothing is impossible]的事,

但总有解决的办法,下面通过实现一个类或函数的累加器来介绍一些较为非主流的方法

方法一 →→ 通过类的__init__和__call__方法

class foo:
    def __init__(self, n=0):
        self.n = n
    def __call__(self, i):
        self.n += i
        return self.n
    
a=foo()
print a(1)
print a(2)
print a(3)
print a(4)

方法二 →→ 在函数中定义一个类

def foo2 (n=0):
    class acc:
        def __init__ (self, s):
            self.s = s
        def inc (self, i):
            self.s += i
            return self.s
    return acc (n).inc
    
a=foo2()
print a(1)
print a(2)
print a(3)
print a(4)

方法三 →→ 使用堆上的匿名参数

def foo3 (i, L=[]):
    if len(L)==0:
        L.append(0)
    L[0]+=i
    return L[0]

print foo3(1)
print foo3(2)
print foo3(3)
print foo3(4)

在python官方的2.6环境下运行,
上述三段代码得到的结果都是

1
3
6
10

Login *


loading captcha image...
(type the code from the image)
or Ctrl+Enter