我使用以下函数在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 ....答案 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