2

yield 返回一个 collections.Iterable 但许多类型也是可迭代的

def aaaa():
    yield 1
    yield 2
    yield 3 

d = aaaa()

print(d,type(d),isinstance(d, collections.Iterable))

打印类型

<generator object aaaa at 0x0000000002626B88> <class 'generator'> True

我没有找到“生成器”类,或者我无法进行类型检查。

4

2 回答 2

10

如果要检查可迭代对象是否为生成器对象:

import types
isinstance(aaaa(), types.GeneratorType) # ==> True

如果要检查函数是否包含yield语句(即函数是生成器):

import inspect
inspect.isgeneratorfunction(aaaa) # ==> True
于 2012-09-18T06:45:17.290 回答
7

看看检查模块,特别是inspect.isgeneratorfunction

也就是说,更有趣的问题是它是列表还是其他可迭代的。要回答这个问题,您只需检查是否__getitem__已在其上定义。

于 2012-09-18T06:44:30.763 回答