如何在运行时更改函数参数?

2024-09-28 22:35:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我是初学者,使用python2.7。我想让definitions参数变为可更改的,这样就可以动态地控制暂停和字符串输出。这可能吗?我读过一些关于线程的东西,但似乎更多的是关于同时执行两个任务。我希望在运行时两个任务之间进行通信。在

    def writeAndPause(stringToWrite,pauseSeconds)
        while True:
            print stringToWrite
            sleep(pauseSeconds)

任何解决方案或链接到文档都非常感谢。谢谢你的时间! /卡尔


Tags: 字符串true参数def动态sleep解决方案线程
3条回答

线程用于同时工作。我想如果你重新设计你的代码,你会得到你想要的效果。考虑从函数中删除while子句并将其放在外部:

def writeAndPause(stringToWrite,pauseSeconds)
    print stringToWrite
    sleep(pauseSeconds)

你把这个函数叫做:

^{pr2}$

@Constantinius是对的:答案几乎肯定是重新设计代码,这样你就不需要做深奥的事情了。在

我将描述另一种纯粹为了好玩的方式。如果您真的想在函数中保留while循环,可以使用Yield Expression

例如:

def writeAndPause():
    while True:
        stringToWrite, pauseSeconds = yield
        print stringToWrite
        sleep(pauseSeconds)

这可以通过以下方式使用:

^{pr2}$

既然你已经看到了,那就忘掉它,照康斯坦丁尼乌斯说的去做吧。在

这对你有帮助吗?在

它利用了默认参数定义的特性,以及列表不是变量而是引用的集合,在我的代码中只有一个(简短地说)

from time import sleep,time

stringToWrite = [None]
pauseSeconds = [0]

def writeAndPause(stw = stringToWrite, pz = pauseSeconds, keep = [time()]):
        if stw[0]:
            print stw[0]
        else:
            print 'START'
        print '  having waited ',time()-keep[0],'seconds,    must wait',pz[0],'seconds'
        keep[0] = time()
        sleep(pz[0])


writeAndPause()


for a,b in (('first',1),('second',2.05),('third',3.4),('fourth',0.88),
            ('BANANA',0.2),('APPLE',1.5),
            ('PEAR',0.77),('CHERRY',4),
            ('ORANGE',0.1),('NUT',6),
            ('APRICOT',0.56),('PLUM',2.5)):

    stringToWrite[0] = a
    pauseSeconds[0] = b
    writeAndPause()

结果

^{pr2}$

相关问题 更多 >