【发布时间】:2013-10-30 06:29:21
【问题描述】:
在Python中似乎有两种方法可以测试一个对象是否是一个生成器:
import types
isinstance(foo, types.GeneratorType)
或:
import inspect
inspect.isgenerator(foo)
本着“应该有一种——最好只有一种——明显的方式来做到这一点。”的精神,推荐这些方式中的一种而不是另一种(大概他们做同样的事情......如果不是,请赐教!)?
【问题讨论】:
-
你为什么要首先检查它?
-
isgenerator 我认为更多的是用于函数(尚未被调用),而 isinstance 通常指的是已由某物返回或构造的实例化生成器(这就是我的 2c 问题)
-
@ThiefMaster:公平的问题,显然在 Python 中要避免类型检查。我有一个函数,它在 99% 的时间内遍历列表两次。在传入生成器的 1% 的时间内,我需要先将其结晶为列表。
-
很确定他们做同样的事情。我认为您使用哪个并不重要,但我认为
isinstance(foo, types.GeneratorType)更惯用。 -
我认为更好的解决方案是记录该函数不适用于生成器,它需要某种容器对象。然后,调用者可以使用
list(gen)或在他们有生成器的情况下调用它。
标签: python performance