我想在Python中获得关于延迟和循环的帮助

我想在Python中获得关于延迟和循环的帮助,python,Python,当我把一个延迟放在一个函数中有延迟的循环之前时,函数在被调用时似乎没有延迟和循环 从时间导入* 从随机导入* def_打印: 全球e_时代 印刷品 返回10 def doloop(l_延迟、s_延迟): 睡眠(s_延迟) 尽管如此: 睡眠(l_延迟) doloop(_print('Hello,world!'),20) 我的期望是输出必须延迟20秒,然后每10秒就必须打印“Hello,world!”串一次。但当执行时,它不会同时延迟和循环。我该怎么办 doloop(_print('Hello,

当我把一个延迟放在一个函数中有延迟的循环之前时,函数在被调用时似乎没有延迟和循环

从时间导入*
从随机导入*
def_打印:
全球e_时代
印刷品
返回10
def doloop(l_延迟、s_延迟):
睡眠(s_延迟)
尽管如此:
睡眠(l_延迟)
doloop(_print('Hello,world!'),20)
我的期望是输出必须延迟20秒,然后每10秒就必须打印“Hello,world!”串一次。但当执行时,它不会同时延迟和循环。我该怎么办

doloop(_print('Hello, world!'), 20)
这将执行以下操作:

  • 评估
    \u打印('Hello world!')
    ->获得10分
  • 像这样调用
    doLoop
    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将函数调用转换为闭包(参数绑定到方法)


有时必须使用lambda函数。lamda函数就像传递给函数的变量。

在阅读了您对要构建的程序的期望之后,我对您的函数真的没有任何意义。。。我只需使用以下代码:

from time import sleep

def _print(n, s): # n = sleep for seconds, s = string to print
    while True: # infinite loop
        print(s) # print the string
        sleep(n) # sleep for number of seconds you specify

sleep(20) # initial sleep of 20 seconds
_print("Hello, World!", 10) # run the custom print function which sleeps for n seconds and prints s string 

希望你已经得到了你想要的。

如果你希望它能打印Hello,world!每10秒,它就不会发生。它将打印一次并返回10。这将被用来在循环中延迟,因为他调用了一次函数,他是如何处理许多hello worlds打印的我不知道你在问什么。它在OPs问题中这样说,他想要“并且每10秒它必须打印一次‘Hello,world!’字符串”,我的意思是每10秒打印一次字符串。对不起,我不是以英语为母语的人……而且不要介意《环球e_时报》部分,这是出于其他目的。@TrietVoNguyenMinh试试我发布的答案。它能做你想要的吗?谢谢,我真的很感谢大家在这个问题上的帮助,因为我是Python的高手。问题现在已经解决了!发布你想做的事情,社区会帮助你做必须做的事情。
from time import sleep

def _print(n, s): # n = sleep for seconds, s = string to print
    while True: # infinite loop
        print(s) # print the string
        sleep(n) # sleep for number of seconds you specify

sleep(20) # initial sleep of 20 seconds
_print("Hello, World!", 10) # run the custom print function which sleeps for n seconds and prints s string