Я прочитал несколько сообщений о stackoverflow о том, как проверить объект, является итератором в Python, но кажется, что они не решили мой вопрос. У меня есть этот пример из книги Эффективного PythonПутаница о одном примере, чтобы проверить, является ли объект итератором в 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!
Почему эта проверка строки, если переменный числа - это итератор? Когда посещения = [15, 35, 80], должно ли быть верно, что iter(numbers) is iter(numbers)
?
Будет ли 'iter (obj) работать obj'? –
@StefanPochmann: это было бы. –