Python-按需生成值

时间:2019-07-06 16:59:25

标签: python list loops iteration

我很难找到解决该问题的方法,我想做的是在一定时间后生成一个值,所以像10秒钟后将100.00的值增加0.01,但这已经很有意义了。对我来说,在for循环或while循环中,直到迭代停止,我才能获取该值,例如,如果我有一个数字为100.00的变量,并且我想将该值增加或减少.01

我可以这样做:

import time
import datetime 
tracking = time.time()

def values():
    cost = 100.00
    increase = .01

    for x in range(1,1000):
        print(x)
        time.sleep(2)

        if time.time() - 10 > tracking:
            cost += increase
            print('Cost: {}'.format(cost))

            tracking = time.time()

    latestvalue = cost   

values()

好的,所以循环就可以了,它每10秒钟将值增加0.01,但是它无用,因为我无法访问它,最新值只会给我它的默认值100.0

我认为的另一种解决方案是仅生成值并将它们放在列表中

import time
import datetime

increment = [100.01, 100.02000000000001, 100.03000000000002, 100.04000000000002, 100.05000000000003]

def values():

    for i in increment:
        newvalue = i
        time.sleep(10)
        print(newvalue)       


c = 0
while True:
    c+=1
    print(c)
    values()
    time.sleep(2)

但是这种方式对我来说似乎并不实用或可靠,有人可以为我提供解决方案吗?经过一定时间(10秒)后,根据需要增加或减少值

2 个答案:

答案 0 :(得分:0)

我不确定我是否解决了问题。该脚本启动一个线程,每个选定的时间步长(在这种情况下为0.1秒)都会生成一个值并将其放置到out_val中。在主线程中,我每2秒读取一次此变量:

from itertools import count
from time import sleep
import threading

def thread_function(start, inc, out_val, t=0.1):
    for val in count(start, inc):
        out_val[0] = val
        sleep(t)


out = [None]
x = threading.Thread(target=thread_function, args=(100.0, 0.1, out))
x.start()

while True:
    print(out[0])
    sleep(2)

打印:

100.0
101.89999999999989
103.89999999999978
105.89999999999966

...and so on.

答案 1 :(得分:0)

您可以使用threading模块中的Timer()对象。在这种情况下,您可以反复调用该函数,而无需进行while循环。为了停止Timer(),使用cancel方法。

from threading import Timer

def while_loop():
    t = Timer(1, while_loop)
    t.start()
    global variable
    variable-=0.1
    do_something()

def do_something():
    print(variable)

variable = 100
while_loop()