l = [1, 3] # 可迭代对象 __iter__t = iter(l) #获取迭代器对象print(t.__next__()) print(t.__next__())# print(t.__next__()) # 报异常复制代码
반복 가능한 객체를 구현하려면 먼저 해당 반복기 객체를 구현해야 합니다. Python에서 반복자를 구현하려면 __next__ 메서드만 구현하면 됩니다. 그러나 collections 패키지의 Iterator 클래스는 __next__ 메서드를 추상 메서드로 정의합니다. 저자는 프로그램의 가독성을 고려하여 반복자를 구현할 때 Iterator 클래스를 상속할 수 있다고 믿습니다.
from random import samplefrom collections import Iterable, Iteratorclass WeatherIterator(Iterator): def __init__(self, cities): self.cities = cities self.index = 0 def getWeather(self, city): return (city, sample(['sun','wind','yu'], 1)[0]) def __next__(self): if self.index == len(self.cities): raise StopIteration city = self.cities[self.index] self.index += 1 return self.getWeather(city)复制代码
먼저 다음 코드를 살펴보세요.from collections import Iterableclass WeatherIterable(Iterable): def __init__(self, cities): self.cities = cities self.index = 0 def __iter__(self): return WeatherIterator(self.cities)复制代码로그인 후 복사이렇게 하면 for 루프를 사용하여 반복할 수 있습니다.
생성기 소개for weather in WeatherIterable(['北京', '上海', '广州']): print(weather)复制代码로그인 후 복사
def gen(): print("step 1") yield 1 print("step 2") yield 2 print("step 3") yield 3复制代码
g = gen() g.__next__() print(g.__next__()) print(g.__next__())复制代码
for x in g: print(x)复制代码
class PrimeNumbers: def __init__(self, start, end): self.start = start self.end = end def isPrimeNum(self, k): #判断是否是素数 if k < 2: return False for i in range(2, k): if k % i == 0: return False return True def __iter__(self): for k in range(self.start, self.end + 1): if self.isPrimeNum(k): yield kfor num in PrimeNumbers(2, 100): print(num)复制代码
l = [1, 2, 3, 4, 5]for x in reversed(l): print(x)复制代码
class FloatRange: def __init__(self, start, end, step=0.1): self.start = start self.end = end self.step = step def __iter__(self): t = self.start while t <= self.end: yield t t += self.step def __reversed__(self): t = self.end while t >= self.start: yield t t -= self.stepfor x in FloatRange(1.0, 4.0, 0.5): print(x)for x in reversed(FloatRange(1.0, 4.0, 0.5)): print(x)复制代码
from itertools import islicefor x in islice(FloatRange(1.0, 4.0, 0.5), 2, 5): print(x)复制代码
for w, e, m in zip([1, 2, 3, 4], ('a', 'b', 'c','d'), [5, 6, 7, 8]): print(w, e, m)复制代码
아아아아
위 내용은 Python 프로그래밍 마스터 2: 반복자를 위해 작성됨의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!