я не знаю "self._iterator = iter(self._container)" в следующем коде.
в django.http:
class HttpResponse(object):
def __iter__(self):
self._iterator = iter(self._container)
return self
def next(self):
chunk = self._iterator.next()
if isinstance(chunk, unicode):
chunk = chunk.encode(self._charset)
return str(chunk)
я прочитал апи:
Возвратите объект итератора. Первый аргумент интерпретируется очень по-разному в зависимости от наличия второго аргумента. Без второго аргумента o должен быть объектом коллекции, который поддерживает протокол итерации (метод
__iter__()
) или должен поддерживать протокол последовательности (метод__getitem__()
с целочисленными аргументами, начинающимися с 0). Если он не поддерживает ни один из этих протоколов, поднимаетсяTypeError
. Если задан второй аргумент, sentinel, то o должен быть вызываемым объектом. Итератор, созданный в этом случае, будет вызывать o без аргументов для каждого вызова своего методаnext()
; если возвращаемое значение равно sentinel, StopIteration будет поднят, в противном случае будет возвращено значение. Одним из полезных применений второй формыiter()
является чтение строк файла до тех пор, пока не будет достигнута определенная строка. В следующем примере файл считывается до тех пор, пока не будет достигнуто значение «СТОП»:
но я также не знаю, что сделала функция iter.
i know the __iter__:
class a(object):
def __init__(self,x=10):
self.x = x
def __iter__(self):
return self
def next(self):
if self.x > 0:
self.x-=1
return self.x
else:
raise StopIteration
Пожалуйста, попробуйте использовать код, а не текст, потому что мой английский не очень хорош, спасибо