python isinstance(obj,tpyes.GeneratorType)失败

时间:2018-06-19 09:36:18

标签: python generator spacy

如果我分别检查类型types.GeneratorType和生成器对象text[0],则返回<class 'generator'>。但是,每当我使用isinstance()时,它都会返回False。我做错了什么?

import types
import spacy

nlp = spacy.load('en')
text = [nlp(' '.join(docs)).sents]

print(types.GeneratorType)

Out[27]: <class 'generator'>


print(text)
Out[28]: [<generator object at 0x000001F4407F8950>]

print(type(text[0]))
Out[29]: <class 'generator'>


print(isinstance(text[0], types.GeneratorType))
Out[30]: False

1 个答案:

答案 0 :(得分:1)

您的代码有点令人困惑,因为变量text是一个包含生成器对象的列表。但我认为你在这里看到的是一个相当微妙的区别:Python中的the difference between generator functions and generators

import types
import inspect

def generator_function():
    for i in range(100):
        yield i

generator = (i for i in range(100))

isinstance(generator_function, types.GeneratorType)  # False
isinstance(generator, types.GeneratorType)  # True

inspect.isgeneratorfunction(generator_function)  # True
inspect.isgeneratorfunction(generator)  # False

spaCy的Doc.sents属性是一个生成句子跨度的生成器函数 - see here用于实现。