EMP*_*EMP 12 python loops for-loop
Python的迭代器很棒,但有时候我确实想要一个C风格的循环 - 而不是一个foreach循环.例如,我有一个开始日期和结束日期,我想在该范围内的每一天做一些事情.当然,我可以使用while循环执行此操作:
current = start
while current <= finish:
do_stuff(current)
current += timedelta(1)
Run Code Online (Sandbox Code Playgroud)
这是有效的,但它是3行而不是1行(在基于C或C的语言中),我经常发现自己忘记编写递增行,特别是如果循环体非常复杂.在Python中有没有更优雅,更不容易出错的方法?
Ned*_*der 29
优雅和Pythonic的方法是在自己的生成器中封装一系列日期的想法,然后在代码中使用该生成器:
import datetime
def daterange(start, end, delta):
""" Just like `range`, but for dates! """
current = start
while current < end:
yield current
current += delta
start = datetime.datetime.now()
end = start + datetime.timedelta(days=20)
for d in daterange(start, end, datetime.timedelta(days=1)):
print d
Run Code Online (Sandbox Code Playgroud)
打印:
2009-12-22 20:12:41.245000
2009-12-23 20:12:41.245000
2009-12-24 20:12:41.245000
2009-12-25 20:12:41.245000
2009-12-26 20:12:41.245000
2009-12-27 20:12:41.245000
2009-12-28 20:12:41.245000
2009-12-29 20:12:41.245000
2009-12-30 20:12:41.245000
2009-12-31 20:12:41.245000
2010-01-01 20:12:41.245000
2010-01-02 20:12:41.245000
2010-01-03 20:12:41.245000
2010-01-04 20:12:41.245000
2010-01-05 20:12:41.245000
2010-01-06 20:12:41.245000
2010-01-07 20:12:41.245000
2010-01-08 20:12:41.245000
2010-01-09 20:12:41.245000
2010-01-10 20:12:41.245000
Run Code Online (Sandbox Code Playgroud)
这类似于答案range
,除了内置函数range
不适用于日期时间,所以我们必须创建自己的,但至少我们只能以封装的方式执行一次.