创建一个将在调用时增加一的函数

时间:2019-02-15 18:15:51

标签: python count

我需要一个函数,该函数每次被调用时都会增加一个。我已经使用过count,但是每次执行都会将其重置为原始值加一个count。我已经看到了很多代码,但是没有一个起作用。这就是我现在拥有的东西

我已经做了很多研究循环和迭代的事情

def count_row():
    count = 1  
    while count >= 1:
        yield count
        count += 1 
return count

4 个答案:

答案 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