是否有任何方法可以调用一个函数,然后在不同时间返回数据mutliphiper时间?
例如,假设我有以下代码:
def do_something():
for i in range(1, 10):
return 1
但是,我希望能够从单个函数调用中返回多个数据,但是在异步时间,这可能吗?
对于上下文,我有一个生成Word文档的程序,将它们转换为PDF,然后将它们组合到单个PDF文档中。我希望能够从GUI调用外部函数来创建文档,然后显示一个进度栏,以通过功能显示当前进度。
编辑:
我已经知道yield
功能。我认为问题底部的具体问题会有所帮助。更清楚地,我正在寻找一种从函数返回多个值并为每个返回值引起不同事件的方式。尽管这可能是一个糟糕的例子,但我想要的是与JavaScript中的.then(){}
相似,但是能够使用多个返回值
.then(){}
yield
是几乎每个人都从函数返回或获取多个值所述的内容。
阅读了您的问题陈述。这是我要为您设计的解决方案。
创建一个函数以更新状态栏,状态栏的值将从全局变量中获取。因此,global x=0
在启动时,在更新功能中,它将首先更新x = x+1
,然后将其递增状态栏。
def do_something():
for i in range(1, 10):
# fetch and perform operation on that Doc for PDF
update_status_bar()
您想要一个生成器:
def do_something():
for i in range(1,10):
yield i
nums = do_something()
每次您在nums
上致电next
时,do_something
的正文将继续执行到下一个yield
语句,此时它将返回该值。
>>> print next(nums) # Outputs 1
>>> print next(nums) # Outputs 2
>>> ...
您正在寻找发电机。
而不是从您的功能中返回您的yield
(在Python中读取"收益率"?
def do_something():
for i in range(1, 10):
yield i
如果您希望重复调用此功能,则需要具有一个反复调用此功能的包装器。有点类似:
def worker():
for i in do_something():
UpdateProgress(i)
sleep(prgressInterval)
thread = Thread(target=worker)
thread.start()