개요
반복자는 컬렉션의 요소에 액세스하는 방법입니다. 반복기 개체는 모든 요소에 액세스할 때까지 컬렉션의 첫 번째 요소부터 액세스하기 시작합니다. 반복자는 앞으로만 갈 수 있고 뒤로 갈 수는 없습니다.
지연 평가 또는 게으른 평가(Lazy Evaluation)
Iterator는 전체 Iteration 프로세스의 모든 요소를 미리 준비할 것을 요구하지 않습니다. 요소는 반복할 때만 평가되며, 해당 요소 전후에는 존재하지 않거나 소멸될 수 있습니다. 이 기능은 거대하거나 무한한 컬렉션을 탐색하는 데 특히 적합합니다.
오늘 대략 다음과 같이 엔터티 클래스를 만들었습니다.
class Account(): def __init__(self, account_name, account_type, account_cost, return_amount=0): self.account_name = account_name # 账户名 self.account_type = account_type # 账户类型 self.account_cost = account_cost # 月结费用 self.return_amount = return_amount # 返还金额
그런 다음 엔터티 목록을 만듭니다. :
accounts = [Account("张三", "年费用户", 450.00, 50), Account("李四", "月结用户", 100.00), Account("杨不悔", "月结用户", 190.00, 25), Account("任我行", "月结用户", 70.00, 10), Account("凌未风", "年费用户", 400.00, 40)]
목록에서 다음 요소를 가져오는 데 필요할 때 next()
함수, 즉 "next"를 실행하고 싶습니다.
직접 테스트해 보세요:
List에서는 next()
기능을 지원하지 않는 것으로 나타났습니다. 현재 List는 iterator가 아닌 iterable일 뿐입니다.
iterable과 iterator의 차이점은 다음과 같습니다.
iterable - __iter__ 객체만 구현합니다.
iterator - __iter__ 및 __next__ 메서드를 모두 구현하는 개체입니다.__iter__
__next__
1. 목록을 반복자로 만듭니다
이전 계정을 반복자로 만들려면 간단한
함수를 사용하세요.
iter()
accounts_iterator = iter(accounts) (next(accounts_iterator)).account_name
아직도 이런 기능을 모르는 Python 개발자가 많은 것으로 추정됩니다. 간단한 기능 바?
2. 사용자 정의 반복자 객체
확장 측면에서 자신만의 반복자 객체를 정의하는 방법은 무엇입니까? 실제로 위의 정의에 따라
,
__iter__
다음으로 AccountIterator 클래스를 정의합니다. __next__
class AccountIterator(): def __init__(self, accounts): self.accounts = accounts # 账户集合 self.index = 0 def __iter__(self): return self def __next__(self): if self.index >= len(self.accounts): raise StopIteration("到头了...") else: self.index += 1 return self.accounts[self.index-1]
실행 결과는 다음과 같습니다.
잠시 던지는 끝에 next() 함수가 구현되었습니다. Python에는 여전히 우리가 계속 탐구하기를 기다리고 있는 예상치 못한 기능이 많이 있습니다. 아마도 이것이 Python의 매력이자 괴짜일 것입니다.
파이썬에서 반복자를 구현하는 방법에 대한 더 많은 예와 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!