如果我分别检查类型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
答案 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用于实现。