【发布时间】:2015-01-04 04:30:15
【问题描述】:
在某些情况下,可以方便地使用带有yield 的生成器在较长时间内将数据传回给调用者。有没有办法做类似于yield 的事情,而不必将函数变成生成器?
这样做的原因是,在某些情况下,当那些嵌套函数可能具有有用的返回值时,我最终不得不将所有被调用者变成生成器。
# currently this works fine, but requires a return arg
def nested(return_store):
return_store[0] = some_test()
yield from some_generator()
def do_stuff(return_store):
yield some_data
for more_data in data:
yield more_data
# Annoying workaround!
return_store = [None]
yield from nested(return_store)
if return_store[0]:
pass # do anything
def main():
return Reply(do_stuff())
相反,我想传递一个对象作为参数,我可以将参数传递给(而不是使用 yield)
# is something like this possible?
def nested(iter_obj):
iter_obj.yield_replacement(some_generator())
return some_test()
def do_stuff(iter_obj):
iter_obj.yield_replacement(some_data)
for more_data in data:
iter_obj.yield_replacement(more_data)
# No annoying workaround
if nested(iter_obj):
pass # do anything
def main():
iter_obj = yield_replacement_object(consumer=print)
# sets up the generator (Reply should consume iter_obj)
do_stuff(iter_obj)
return Reply(iter_obj)
【问题讨论】: