可以說我有兩個功能:在python中有一種方法可以在調用它之前檢查函數是否是「生成器函數」?
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'聲明,那麼'回報'函數內的聲明不允許有參數。它必須只是'返回',它終止了發電機。好問題! – 2009-12-09 05:13:29
好點,'goo()'不應該是有效的,但它至少在這裏(Python 2.6.2)。 – Carlos 2009-12-09 05:32:02
給當前讀者的一個說明:@GregHewgill上面的評論不再正確,現在你可以返回參數(它是在StopIteration的值attr處傳遞的) – wim 2014-03-14 01:58:40