>  기사  >  백엔드 개발  >  Python 프로그래밍 마스터 2: 반복자를 위해 작성됨

Python 프로그래밍 마스터 2: 반복자를 위해 작성됨

coldplay.xixi
coldplay.xixi앞으로
2020-11-04 17:19:112061검색

python tutorial 칼럼에서는 프로그래밍에 사용되는 반복자를 소개합니다. ㅋㅋㅋ 무늬. Python의 기본 데이터 유형 중 for 루프에 사용할 수 있는 유형은 반복 가능한 유형입니다. 물론 iter 함수를 사용하여 해당 반복자를 얻은 다음 객체를 순회할 수도 있습니다. 예를 들어 다음 코드는

l = [1, 3]  # 可迭代对象 __iter__t = iter(l) #获取迭代器对象print(t.__next__())
print(t.__next__())# print(t.__next__()) # 报异常复制代码

반복 가능한 객체를 구현하려면 먼저 해당 반복기 객체를 구현해야 합니다. Python에서 반복자를 구현하려면 __next__ 메서드만 구현하면 됩니다. 그러나 collections 패키지의 Iterator 클래스는 __next__ 메서드를 추상 메서드로 정의합니다. 저자는 프로그램의 가독성을 고려하여 반복자를 구현할 때 Iterator 클래스를 상속할 수 있다고 믿습니다. Python 프로그래밍 마스터 2: 반복자를 위해 작성됨

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)复制代码
반복 가능한 객체를 구현하려면 __iter__ 메서드만 구현하면 됩니다. 마찬가지로 collections 패키지의 Iterable 클래스도 __iter__ 메서드를 추상 클래스로 정의합니다.
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复制代码

위 gen 함수의 반환 값은 생성기 개체입니다.

g = gen()
g.__next__()
print(g.__next__())
print(g.__next__())复制代码
위 코드에서 볼 수 있듯이 생성기의 __next__ 메서드가 호출될 때마다 Yield 키워드를 만날 때까지 gen 함수를 실행하고 다음을 반환합니다. 따라서 발전기는 중단될 수 있는 기능으로 이해될 수 있습니다.

참고: 생성기 개체는 반복 가능한 개체이기도 합니다.

for x in g:
    print(x)复制代码
생성기 함수를 사용하여 반복 가능한 객체를 구현하는 방법

생성기 함수로 __iter__ 메서드를 구현하면 반복 가능한 객체를 구현할 수 있습니다.

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)复制代码

역방향 반복 수행 방법 및 역방향 반복 구현 방법

iter 함수는 반복 가능한 객체의 정방향 반복자를 얻을 수 있고, reverse 함수는 반복 가능한 객체의 역방향 반복자를 얻을 수 있습니다.

l = [1, 2, 3, 4, 5]for x in reversed(l):
    print(x)复制代码

역 반복을 구현하려면 __reversed__ 메서드를 구현하면 됩니다.

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)复制代码
반복자에서 슬라이싱 작업을 수행하는 방법

itertools 패키지의 islice 함수는 반복 가능한 객체에서 슬라이싱 작업을 수행할 수 있습니다.

from itertools import islicefor x in islice(FloatRange(1.0, 4.0, 0.5), 2, 5):
    print(x)复制代码

for 문에서 반복 가능한 여러 개체를 반복하는 방법

zip 메서드를 사용하여 해당 요소의 튜플을 형성하세요.

for w, e, m in zip([1, 2, 3, 4], ('a', 'b', 'c','d'), [5, 6, 7, 8]):
    print(w, e, m)复制代码

itertools 패키지의 체인 기능을 사용하여 반복 가능한 여러 객체를 연결하세요. zip 메소드를 사용하여 해당 요소의 튜플을 형성하십시오.

아아아아

위 내용은 Python 프로그래밍 마스터 2: 반복자를 위해 작성됨의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.im에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제