search
HomeBackend DevelopmentPython TutorialUnderstanding Python's iterators

What is iteration

Objects that can be directly used in for loops are collectively called iterable objects (Iterable).
An object that can be called by the next() function and continuously returns the next value is called an iterator.
All Iterables can be converted into Iterators through the built-in function iter().

For iterators, one __next__() is enough. When you use for and in statements, the program automatically calls the iterator object of the object to be processed, and then uses its __next__() method until a StopIteration exception is detected.

>>> L = [1,2,3]
>>> [x**2 for x in L]
[1, 4, 9]
>>> next (L)
Traceback (most recent call last):
File "", line 1, in
TypeError: 'list' object is not an iterator
>>> I=iter (L)
>>> next (I)
1
>>> next (I)
2
>>> next (I)
3
> (I)
Traceback (most recent call last):
File "", line 1, in
StopIteration

In the above example, the list L can be looped by for but cannot be used by built-in functions next() is used to find the next value, so L is Iterable.
L is packaged by iter and set to I. I can be used by next() to find the next value, so I is an Iterator.

Digression:

The built-in function iter() only calls the object's __iter__() method, so there must be a method __iter__() inside the list object

The built-in function next() only calls the object's _ _next__() method, so the method __next__() must not exist inside the list object, but this method must exist in Itrator.

In fact, inside the for loop, iter() is called first to turn Iterable into Iterator before loop iteration.

>>> L = [4,5,6]
>>> I = L.__iter__()
>>> L.__next__()
Traceback (most recent call last ):
File "", line 1, in
AttributeError: 'list' object has no attribute '__next__'
>>> I.__next__()
4
>> ;> from collections import Iterator, Iterable
>>> isinstance(L, Iterable)
True
>>> Iterable)
True
>>> isinstance(I, Iterator)
True
>>> [x**2 for x in I]
[25, 36]


Iterator inherits from Iterable, From the test below, you can easily see that Iterator contains __iter__() and __next__() methods, while Iteratble only contains __iter__().

>>> from collections import Iterator, Iterable

>>> help(Iterator)

Help on class Iterator:

class Iterator(Iterable)
| Method resolution order:
|
| builtins.object
|**Note: It can be seen from here that Iterable inherits from object, and Iterator inherits from Iterable.
| Methods defined here:
|
| __iter__(self)
|
| __next__(self)
| Return the next item from the iterator. When exhausted, raise StopIteration
......
>>> ; help(Iterable)
Help on class Iterable:

class Iterable(builtins.object)
| Methods defined here:
|
| __iter__(self)
......


iterable needs to contain __iter__ () method is used to return iterator, and iterator needs to contain __next__() method to be looped

If we define the iterator ourselves, we only need to define an __iter__() function in the class and use it to return an __next__( ) method object is enough.

Go directly to the code

class Iterable:
def __iter__(self):

return Iterator()


class Iterator:
def __init__(self):
self.start=-1
def __next__(self):
self. start +=2
                                                                                                                        ’ ’ s ’ t         ’ ‐   down to ’ ’ s ’ ‐ ‐ ‐ ‐ ‐ ‐ ft

The above code is to find odd numbers within 10. The class name in the code can be chosen casually. It is not necessary to use the class name I provided above.
If the StopIteration exception is not implemented in the __next__ method of Iterator, then all odd numbers represented, then the conditions for exiting the loop need to be set when calling.

class Iterable:
def __iter__(self):
return Iterator()

class Iterator:
def __init__(self):
self.start=-1
def __next__(self):
self.start +=2
            return self.start

I = Iterable()
for count, i in zip(range(5),I):   #You can also use the built-in function enumerate to implement counting work.
Print(i)

We use range to realize how many elements to print, here it means printing 5 elements, and the return result is consistent with the above.

Of course, we can merge these two classes together to simplify the program.
The final version is as follows

class Iterable:
def __iter__(self):
+=2
if self .start & gt; 10:
Raise Stoption
Return Self.start

i = ITERABLE ()
For I in I:
Print (i)


Copy iterator is a one -time consumer, finished It will be empty from now on, please take a look.

>>> L=[1,2,3]

>>> I=iter(L)

>>> for i in I:

... print(i, end='-')

...

1-2-3-

>>>next(I)
Traceback (most recent call last):
File "", line 1, in
StopIteration


When the loop is exhausted, a StopIteration exception will be raised when the call is used again.

We want to save the iterator through direct assignment so that it can be used next time.
But as you can see from the example below, it doesn’t work at all.

>>> I=iter(L)

>>> J=I

>>> next(I)

1
>>> next(J)

2

>>> next(I)
3
>>> next(J)
Traceback (most recent call last):
File "", line 1, in
StopIteration


So how can we achieve the effect we want?
We need to use deepcopy in the copy package, please see below:

>>> import copy
>>> I=iter(L)

>>> J=copy.deepcopy (I)

>>> next (I)
1

>>> next (I)

2
> Move backward and cannot go back to the beginning.
So something special needs to be done to achieve functionality like moving backwards.

The above codes are all tested in Python 3.4.

The above is the content of understanding Python’s iterators. For more related articles, please pay attention to the PHP Chinese website (www.php.cn)!


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
How to implement factory model in Python?How to implement factory model in Python?May 16, 2025 pm 12:39 PM

Implementing factory pattern in Python can create different types of objects by creating a unified interface. The specific steps are as follows: 1. Define a basic class and multiple inheritance classes, such as Vehicle, Car, Plane and Train. 2. Create a factory class VehicleFactory and use the create_vehicle method to return the corresponding object instance according to the type parameter. 3. Instantiate the object through the factory class, such as my_car=factory.create_vehicle("car","Tesla"). This pattern improves the scalability and maintainability of the code, but it needs to be paid attention to its complexity

What does r mean in python original string prefixWhat does r mean in python original string prefixMay 16, 2025 pm 12:36 PM

In Python, the r or R prefix is ​​used to define the original string, ignoring all escaped characters, and letting the string be interpreted literally. 1) Applicable to deal with regular expressions and file paths to avoid misunderstandings of escape characters. 2) Not applicable to cases where escaped characters need to be preserved, such as line breaks. Careful checking is required when using it to prevent unexpected output.

How to clean up resources using the __del__ method in Python?How to clean up resources using the __del__ method in Python?May 16, 2025 pm 12:33 PM

In Python, the __del__ method is an object's destructor, used to clean up resources. 1) Uncertain execution time: Relying on the garbage collection mechanism. 2) Circular reference: It may cause the call to be unable to be promptly and handled using the weakref module. 3) Exception handling: Exception thrown in __del__ may be ignored and captured using the try-except block. 4) Best practices for resource management: It is recommended to use with statements and context managers to manage resources.

Usage of pop() function in python list pop element removal method detailed explanation of theUsage of pop() function in python list pop element removal method detailed explanation of theMay 16, 2025 pm 12:30 PM

The pop() function is used in Python to remove elements from a list and return a specified position. 1) When the index is not specified, pop() removes and returns the last element of the list by default. 2) When specifying an index, pop() removes and returns the element at the index position. 3) Pay attention to index errors, performance issues, alternative methods and list variability when using it.

How to use Python for image processing?How to use Python for image processing?May 16, 2025 pm 12:27 PM

Python mainly uses two major libraries Pillow and OpenCV for image processing. Pillow is suitable for simple image processing, such as adding watermarks, and the code is simple and easy to use; OpenCV is suitable for complex image processing and computer vision, such as edge detection, with superior performance but attention to memory management is required.

How to implement principal component analysis in Python?How to implement principal component analysis in Python?May 16, 2025 pm 12:24 PM

Implementing PCA in Python can be done by writing code manually or using the scikit-learn library. Manually implementing PCA includes the following steps: 1) centralize the data, 2) calculate the covariance matrix, 3) calculate the eigenvalues ​​and eigenvectors, 4) sort and select principal components, and 5) project the data to the new space. Manual implementation helps to understand the algorithm in depth, but scikit-learn provides more convenient features.

How to calculate logarithm in Python?How to calculate logarithm in Python?May 16, 2025 pm 12:21 PM

Calculating logarithms in Python is a very simple but interesting thing. Let's start with the most basic question: How to calculate logarithm in Python? Basic method of calculating logarithm in Python The math module of Python provides functions for calculating logarithm. Let's take a simple example: importmath# calculates the natural logarithm (base is e) x=10natural_log=math.log(x)print(f"natural log({x})={natural_log}")# calculates the logarithm with base 10 log_base_10=math.log10(x)pri

How to implement linear regression in Python?How to implement linear regression in Python?May 16, 2025 pm 12:18 PM

To implement linear regression in Python, we can start from multiple perspectives. This is not just a simple function call, but involves a comprehensive application of statistics, mathematical optimization and machine learning. Let's dive into this process in depth. The most common way to implement linear regression in Python is to use the scikit-learn library, which provides easy and efficient tools. However, if we want to have a deeper understanding of the principles and implementation details of linear regression, we can also write our own linear regression algorithm from scratch. The linear regression implementation of scikit-learn uses scikit-learn to encapsulate the implementation of linear regression, allowing us to easily model and predict. Here is a use sc

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool