__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 功能实现此目的的简单方法?
它说它需要输入一个数字 - 我认为它应该很容易抽象为任何你可以使用 +
运算符的东西,但它没有。
您可能可以定义自己的 count
和 range
,例如:
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) ) ) )
基本上,我希望能够简单地执行以下操作:
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 功能实现此目的的简单方法?
它说它需要输入一个数字 - 我认为它应该很容易抽象为任何你可以使用 +
运算符的东西,但它没有。
您可能可以定义自己的 count
和 range
,例如:
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) ) ) )