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

iterableがジェネレーターオブジェクトかどうかを確認したい場合:

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

関数にステートメントが含まれているかどうかを確認する場合yield(つまり、関数がジェネレーターである場合):

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

inspect モジュール、特にinspect.isgeneratorfunctionを見てください。

そうは言っても、より興味深い質問は、それがリストなのか他のイテラブルなのかということです。その質問に答えるには、__getitem__が定義されているかどうかを確認するだけです。

于 2012-09-18T06:44:30.763 に答える