当前位置:  开发笔记 > 编程语言 > 正文

如何在不结束Python函数的情况下返回更改变量?

如何解决《如何在不结束Python函数的情况下返回更改变量?》经验,为你挑选了1个好方法。

我试图将下面代码的答案返回到变量中,变量应该每5秒更改一次因此我不能使用'return',因为它结束了函数.

例:

from time import sleep

def printit():
    cpt = 1
    while True:
        if cpt < 3:
            number = ("images[" + str(cpt) + "].jpg")
            return number #here is the return
            sleep(5)
            cpt+=1
        else:
            printit()

answer = printit() 
print(answer) #only 1 answer is printed, then the function ends because of the 'return'

解决此问题的解决方案是什么?

变量答案应每5秒更改一次而不结束该功能.



1> miraculixx..:

解决此问题的解决方案是什么?变量答案应每5秒更改一次而不结束该功能.

这是一种基于发电机功能的方法

from time import sleep

def printit():
    cpt = 1
    while True:
        if cpt < 3:
            number = ("images[" + str(cpt) + "].jpg")
            yield number #here is the return
            sleep(5)
            cpt+=1
        else:
            for number in printit():
                yield number


for number in printit():
    print number

这将使进程保持运行,直到for循环不再接收到值.要正常停止它,您可以将值发送到生成器:

gen = printit()
for i, number in enumerate(gen):
    print i, number
    if i > 3:
        try: 
            gen.send(True)
        except StopIteration:
            print "stopped"

为此,修改yield语句如下:

(...)
stop = yield number #here is the return
if stop:
   return
(...)

根据您想要实现的目标,这可能会或可能不会提供足够的并发级别.如果你想了解更多关于基于生成器的协同程序的知识,David Beazley的这些非常有见地的论文和视频是一个宝库.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有