如何确定函数返回值是否为生成器?

时间:2012-09-18 06:39:50

标签: python python-3.x

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

我没有找到班级'发电机'或者我不能做类型检查。

2 个答案:

答案 0 :(得分:10)

如果要检查 iterable 是否为生成器对象:

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

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

import inspect
inspect.isgeneratorfunction(aaaa) # ==> True

答案 1 :(得分:7)

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

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