我需要一个函数,该函数每次被调用时都会增加一个。我已经使用过count,但是每次执行都会将其重置为原始值加一个count。我已经看到了很多代码,但是没有一个起作用。这就是我现在拥有的东西
我已经做了很多研究循环和迭代的事情
def count_row():
count = 1
while count >= 1:
yield count
count += 1
return count
答案 0 :(得分:4)
您可以使用itertools.count
。
from itertools import count
counter = count(1)
next(counter) # 1
next(counter) # 2
如果您绝对需要有状态函数而不是调用next
,则可以将count
包装在函数中。
def counter(_count=count(1)):
return next(_count)
counter() # 1
counter() # 2
或者,itertools.count
是一个类,您可以从其继承以扩展其行为并使其可调用。
class CallableCount(count):
def __call__(self):
return next(self)
counter = CallableCount(1)
counter() # 1
counter() # 2
使用类应该是您的首选方法,因为它允许实例化多个计数器。
答案 1 :(得分:2)
您需要关闭。定义一个函数make_counter
,该函数初始化一个局部变量,然后定义并返回一个函数,该函数在每次调用时递增该变量。
def make_counter():
count = -1
def _():
count += 1
return count
return _
count_row = make_counter()
现在count_row
将在每次调用时返回一个新值:
>>> count_row()
0
>>> count_row()
1
这是类的对偶。您具有一个“包装”某些数据的函数(在变量上关闭),而不是通过关联的方法来包装数据。类版本;请注意与make_counter
的相似之处:
class Count:
def __init__(self):
self.count = -1
def __call__(self):
self.count += 1
return count
该类的实例现在的行为类似于我们之前的闭包。
>>> count_row = Count()
>>> count_row()
0
>>> count_row()
1
答案 2 :(得分:0)
您可以在此处使用一个生成器,该生成器每次使用next()
进行调用时都会将值递增1:
def count_row():
count = 0
while True:
count += 1
yield count
itr = count_row()
print(next(itr)) # 1
print(next(itr)) # 2
仔细观察,这相当于itertools.count()
所做的事情。
答案 3 :(得分:-1)
如果我没错,这应该可以工作:
count=0
def count_row(count):
count += 1
return count