이 글에서는 Python의 Iterator 및 Generator 인스턴스에 대한 자세한 설명을 주로 소개합니다. 필요한 친구는
Python의 Iterator 및 Generator 인스턴스에 대한 자세한 설명
이 문서에서는 다음과 같이 다양한 애플리케이션 시나리오와 해당 솔루션에 초점을 맞춰 Python의 반복자와 생성기에 대한 몇 가지 관련 지식을 요약합니다.1 수동으로 반복기를 탐색합니다
def manual_iter(): with open('/etc/passwd') as f: try: while True: line=next(f) if line is None: break print(line,end='') except StopIteration: pass
#test case items=[1,2,3] it=iter(items) next(it) next(it) next(it)
2. 에이전트 반복
개체 예:
class Node: def init(self,value): self._value=value self._children=[] def repr(self): return 'Node({!r})'.fromat(self._value) def add_child(self,node): self._children.append(node) def iter(self): #将迭代请求传递给内部的_children属性 return iter(self._children)
#test case if name='main': root=Node(0) child1=Node(1) child2=Nide(2) root.add_child(child1) root.add_child(child2) for ch in root: print(ch)
3. 역방향 반복
a=[1,2,3,4] for x in reversed(a): print(x) #4 3 2 1 f=open('somefile') for line in reversed(list(f)): print(line,end='') #test case for rr in reversed(Countdown(30)): print(rr) for rr in Countdown(30): print(rr)예제 2
class Countdown: def init(self,start): self.start=start #常规迭代 def iter(self): n=self.start while n > 0: yield n n -= 1 #反向迭代 def reversed(self): n=1 while n <= self.start: yield n n +=1
4 .선택적 반복
with open('/etc/passwd') as f: for line in f: print(line,end='')예제 2
from itertools import dropwhile with open('/etc/passwd') as f: for line in dropwhile(lambda line:line.startwith('#'),f): print(line,end='')
응용 시나리오: 동시에 여러 시퀀스를 반복하고 매번 하나의 시퀀스에서 요소를 가져오고 싶습니다.
해결책: zip() 기능 사용
응용 시나리오: 여러 개체에 대해 동일한 작업을 수행하려고 하지만 이러한 개체는 서로 다릅니다. 컨테이너의
해결 방법: itertool.chain() 함수 사용
애플리케이션 시나리오: 다중 레벨 중첩 시퀀스를 단일 레벨 목록으로 확장하려는 경우
해결책: Yield from 문이 포함된 재귀 생성기를 사용하세요
예
아아아아아
아아아아아
위 내용은 Python의 반복자 및 생성기 인스턴스에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!