【发布时间】:2012-02-22 18:34:02
【问题描述】:
有没有办法检测生成器的__iter__ 是否被list() 调用?据我了解, list(obj) 将调用__iter__;但是,对于无限生成器,我希望它返回错误。
例如,我有以下生成器:
def gen():
while 1:
yield 1
由于调用 list(gen) 会导致无限循环,我想让它返回一个错误。有没有办法做到这一点?
【问题讨论】:
-
__iter__没有责任确保这一点,我也不认为这是list()的责任。这是程序员的责任! -
你想用这个保护谁?如果您适当地命名无限生成器,那么编写对生成器的调用的人应该清楚发生了什么;例如如果你写
list( allPrimeNumbers() ),你应该得到你所得到的。