当我在函数内部具有延迟的循环之前放置延迟时,该函数在调用时似乎不会延迟和循环。
from time import *
from random import *
def _print(s):
global e_times
print(s)
return 10
def doloop(l_delay, s_delay):
sleep(s_delay)
while True:
sleep(l_delay)
doloop(_print('Hello, world!'), 20)
我期望输出必须延迟 20 秒,然后每 10 秒它必须打印“Hello, world!” 串一次。但是在执行时,它不会同时延迟和循环。我应该怎么办?
doloop(_print('Hello, world!'), 20)
这将执行以下操作:
_print('Hello world!')
-> 得到 10doLoop
像这样调用:doLoop(10, 20)
函数参数在传递给函数之前先求值。因此,您显然不会得到多次调用该函数的循环。
您需要做的是将函数本身传递给doLoop
方法。并使用它的返回值。
def doloop(call_func, s_delay):
sleep(s_delay)
while True:
l_delay = call_func()
sleep(l_delay)
然后调用它:
doloop(lambda: _print('Hello, world!'), 20)
这里的 lambda 将函数调用转换为闭包(参数绑定到方法)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句