__add__ 任何类型的广义范围/计数函数

Generalized range / count functions for any type with __add__

基本上,我希望能够简单地执行以下操作:

 from datetime import datetime, timedelta
 from itertools import count
 start, end = datetime(2017,1,1), datetime(2018,1,1)
 calendar = count(start, timedelta(days=1))
 # Or better
 calendar = range(start, end, timedelta(days=1))

是否有使用 builting/stdlib 功能实现此目的的简单方法? 它说它需要输入一个数字 - 我认为它应该很容易抽象为任何你可以使用 + 运算符的东西,但它没有。

您可能可以定义自己的 countrange,例如:

def count(start, delta):
    cur = start
    while True:
        yield cur
        cur = cur + delta

def range(start, stop, delta):
    # probably need some assert start < stop
    cur = start
    while cur < stop:
        yield cur
        cur = cur + delta

您当然可以重新定义 count 以接受可以添加的任何类型。否则,如果你不想定义自己的类型,你可以使用 itertools 来做同样的事情:

 calendar = itertools.accumulate( 
              itertools.chain( [start],
                               itertools.repeat( timedelta(days=1) ) ) )