Home  >  Article  >  Backend Development  >  Example of method to implement iterator in python

Example of method to implement iterator in python

高洛峰
高洛峰Original
2017-02-23 15:47:221858browse

Overview

Iterator is a way to access the elements of a collection. The iterator object starts accessing from the first element of the collection until all elements have been accessed. Iterators can only go forward and not backward.

Lazy evaluation or lazy evaluation

Iterators do not require you to prepare all the elements in the entire iteration process in advance. An element is only evaluated when iterating to it, and before or after that element may not exist or be destroyed. This feature makes it particularly suitable for traversing some huge or infinite collections.

Today I created an entity class, roughly as follows:

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 # 返还金额

Then create an entity list:

accounts = [Account("张三", "年费用户", 450.00, 50),
  Account("李四", "月结用户", 100.00),
  Account("杨不悔", "月结用户", 190.00, 25),
  Account("任我行", "月结用户", 70.00, 10),
  Account("凌未风", "年费用户", 400.00, 40)]

I want to execute the next() function, that is, "next" when needed to get the list the next element.

Test it directly:

Example of method to implement iterator in python

It turns out that List does not support the next() feature. At this time, List is just an iterable, not an iterator.

The difference between iterable and iterator is as follows:

  1. iterable - only implements the object of __iter__;

  2. iterator - an object that implements both __iter__ and __next__ methods.

Among them, __iter__ returns the iterator object, and __next__ returns the next element of the iteration process.

1. Make the list an iterator

To make the previous accounts List an iterator, just use a simple iter() function :

accounts_iterator = iter(accounts)
(next(accounts_iterator)).account_name

The result is as shown below:

Example of method to implement iterator in python

It is estimated that there are still many functions for such a simple function Many Python developers don’t know this?

2. Custom iterator object

In terms of expansion, how to define your own iterator object? In fact, it is to implement the __iter__ and __next__ methods according to the above definition.

We next define an AccountIterator class:

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]

The running result is as follows:

Example of method to implement iterator in python

After this tossing, the next() function was realized. Python has many unexpected functions that are still waiting for us to continue to explore. Perhaps this is the charm and geekiness of Python.

For more related articles on methods and examples of implementing iterators in python, please pay attention to the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn