我有一个程序,包括执行基于时间的循环。有点像......
import time
endtime=time.time()+60.0 #1minute
while (time.time()<endtime):
do something
我只是想知道这是否可以使用for循环?我可以在python中构建基于循环的时间吗?
答案 0 :(得分:4)
来自https://wiki.python.org/moin/ForLoop
我何时使用for循环? 传统上,当您有一段要重复n次的代码时,就会使用For循环。作为替代方案,有WhileLoop,但是,当要满足条件时使用,或者如果你想要一段代码永远重复,例如 -
legToRemove
循环对此任务感觉更自然,因为NULL
需要可枚举或生成器。
但如果你真的想用while
循环来做,我想你可以构造一个产生一些东西直到for
的生成器:
for
但是如你所见,你在幕后再次使用time.time()<endtime
。
也许有人可以设法不使用生成器中的def there_is_more_time(e)
while time.time() < e:
yield True
for i in there_is_more_time(endtime):
do something
,但这样做有什么意义呢?
答案 1 :(得分:3)
不确定。这是一个迭代器,它为您提供从重复开始到结束的时间:
while
当我运行它时,它会输出:
while
如果您需要一些不同的值,只需更改def time_counter(seconds):
starttime = time.time()
while True:
now = time.time()
if now > starttime + seconds:
break
yield now - starttime
for t in time_counter(20):
print(t)
time.sleep(3)
表达式。
如果您不需要任何价值......那么您不需要9.5367431640625e-07
3.002220869064331
6.0040669441223145
9.004395961761475
12.006848812103271
15.009617805480957
18.011652946472168
声明;您现有的代码已经完全可读,并且迭代并丢弃一些无意义的值的yield
循环只会让它变得混乱。
答案 2 :(得分:0)
也许你想创建一个scheduler
对象?
https://docs.python.org/2/library/sched.html
import sched, time
s = sched.scheduler(time.time, time.sleep)
def print_time():
print "From print_time", time.time()
def print_some_times():
print time.time()
s.enter(1, 1, print_time, ())
s.enter(2, 1, print_time, ())
s.enter(3, 1, print_time, ())
s.enter(4, 1, print_time, ())
s.enter(5, 1, print_time, ())
s.run()
print time.time()
输出:
1430392956.35
From print_time 1430392957.35
From print_time 1430392958.35
From print_time 1430392959.35
From print_time 1430392960.35
From print_time 1430392961.35
1430392961.35