【发布时间】:2010-12-24 17:00:01
【问题描述】:
假设我有两个功能:
def foo():
return 'foo'
def bar():
yield 'bar'
第一个是普通函数,第二个是生成器函数。现在我想写这样的东西:
def run(func):
if is_generator_function(func):
gen = func()
gen.next()
#... run the generator ...
else:
func()
is_generator_function() 的简单实现是什么样的?使用types 包我可以测试gen 是否是一个生成器,但我希望在调用func() 之前这样做。
现在考虑以下情况:
def goo():
if False:
yield
else:
return
goo() 的调用将返回一个生成器。我假设python解析器知道goo()函数有一个yield语句,我想知道是否可以轻松获取该信息。
谢谢!
【问题讨论】:
-
请注意,如果函数包含
yield语句,则该函数内部的return语句不允许有参数。它必须只是终止生成器的return。好问题! -
好点,
goo()应该是无效的,但至少在这里(Python 2.6.2)是有效的。 -
给当前读者的说明:@GregHewgill 上面的评论不再正确,现在您可以返回参数(通过 StopIteration 的值 attr 传递)
标签: python function generator coroutine