Python静态变量生成器函数

时间:2015-03-17 06:23:18

标签: python python-2.7

我使用以下函数在Python中生成静态变量:

 #Static variable generator function
def static_num(self):
    k = 0
    while True:
        k += 1
        yield k

当我从主代码调用此函数时:

 regression_iteration = self.static_num()
 print " Completed test number %s  %s \n\n" % (regression_iteration, testname)

我得到了这个输出:

  "Completed test number <generator object static_num at 0x027BE260>  be_sink_ncq"

为什么我没有获得递增的整数?我的静态变量生成器在哪里出错了?

修改

我现在以下列方式调用函数static_num:

regression_iteration = self.static_num().next()

但它只返回'1',因为每次调用函数时'k'的值都被初始化为零。因此,在每次调用函数

时,我都没有得到所需的输出1,2,3,4 ....

3 个答案:

答案 0 :(得分:2)

很难说你是否需要使用这种方法 - 我强烈怀疑它,但是你可以滥用可变类型作为默认初始化器来代替生成器:

def counter(init=[0]):
    init[0] += 1
    return init[0]

x = counter()
print(x)  # 1
print(x)  # 1
print(x)  # 1
x = counter()
print(x)  # 2
print(x)  # 2
print(x)  # 2
# ... etc

每次通话时counter的返回值增加1,从1开始。

答案 1 :(得分:0)

yield关键字将函数返回值从int转换为int生成器,因此你必须在self.static_num()&#34;中使用&#34; for i。访问int。如果你想逐个访问生成器。使用下一个功能。

答案 2 :(得分:0)

假设通过static你意味着静态到类,最好的方法是使用类变量和classmethod

class Static_Number_Class(object):
    _static_number = 0
    @classmethod
    def static_number(cls):
        cls._static_number += 1
        return cls._static_number

如果这只是一个独立的功能,你可以使用一个闭包:

def Counter():
    n = 0
    def inner():
        n += 1
        return n
    return inner

count = Counter()
x = count()
print(x) # 1
x = count()
print(x) # 2