Ответ 1
Все это прекрасно работает, за исключением опечатки - вы, вероятно, имеете в виду:
x = Counter(3,8)
for i in x:
print i
а не
x = Counter(3,8)
for i in x:
print x
Для словаря я могу использовать iter() для итерации по клавишам словаря.
y = {"x":10, "y":20}
for val in iter(y):
print val
Когда у меня есть итератор следующим образом,
class Counter:
def __init__(self, low, high):
self.current = low
self.high = high
def __iter__(self):
return self
def next(self):
if self.current > self.high:
raise StopIteration
else:
self.current += 1
return self.current - 1
Почему я не могу использовать его таким образом
x = Counter(3,8)
for i in x:
print x
ни
x = Counter(3,8)
for i in iter(x):
print x
но так?
for c in Counter(3, 8):
print c
Какое использование функции iter()?
Я предполагаю, что это может быть один из способов использования iter().
class Counter:
def __init__(self, low, high):
self.current = low
self.high = high
def __iter__(self):
return self
def next(self):
if self.current > self.high:
raise StopIteration
else:
self.current += 1
return self.current - 1
class Hello:
def __iter__(self):
return Counter(10,20)
x = iter(Hello())
for i in x:
print i
Все это прекрасно работает, за исключением опечатки - вы, вероятно, имеете в виду:
x = Counter(3,8)
for i in x:
print i
а не
x = Counter(3,8)
for i in x:
print x
Я думаю, что ваша фактическая проблема заключается в том, что вы print x
, когда имеете в виду print i
iter()
используется для получения итератора по заданному объекту. Если у вас есть метод __iter__
, который определяет, что он действительно сделает. В вашем случае вы можете только перебирать счетчик один раз. Если вы определили __iter__
, чтобы вернуть новый объект, он сделал бы это так, чтобы вы могли повторять столько раз, сколько захотите. В вашем случае счетчик уже является итератором, поэтому имеет смысл вернуться сам.