【发布时间】:2016-10-14 11:06:29
【问题描述】:
我在 stackoverflow 上阅读了一些关于如何检查对象是否是 Python 中的迭代器的帖子,但似乎它们并没有解决我的问题。我在 Effective Python
一书中有这个例子def normalize_defensive(numbers):
if iter(numbers) is iter(numbers): # An iterator — bad!
raise TypeError(‘Must supply a container’)
total = sum(numbers)
result = []
for value in numbers:
percent = 100 * value / total
result.append(percent)
return result
使用方法:
visits = [15, 35, 80]
normalize_defensive(visits) # No error
visits = ReadVisits(path) # ReadVisits is a class with an __iter__ method.
normalize_defensive(visits) # No error
it = iter(visits)
normalize_defensive(it)
>>>
TypeError: Must supply a container
所以我的问题在这一行:
if iter(numbers) is iter(numbers): # An iterator — bad!
为什么这一行检查变量 numbers 是否是一个迭代器?当visits = [15, 35, 80]时,iter(numbers) is iter(numbers)应该是真的吗?
【问题讨论】: