Home Backend Development Python Tutorial Analyzing generators in Python and their differences from iterators

Analyzing generators in Python and their differences from iterators

Jul 21, 2016 pm 02:53 PM
python Builder Iterator

Generator
A generator is an iterator, a special function that uses the yield operation to construct a function into an iterator. An ordinary function has an entry and a return value; when the function is called, execution starts from the entry and the corresponding return value is returned at the end. The function defined by the generator has multiple entries and multiple return values; perform the next() operation on the generator, enter the generator to start executing the code, and the yield operation returns a value to the caller and suspends the function; hang When starting, the function execution environment and parameters are saved; when performing another next() operation on the generator, the parameters are recalled from the suspended state, and the last suspended execution environment is entered to continue the following operations until the next one. Repeat the above process during the yield operation. Python's loop operation is different from the implementation of C language. If you use data structures such as List, a lot of content will be consumed; using a generator in a loop operation only requires instantiating an object in memory, which can reduce memory usage and improve the execution speed of loop operations. .

>>>def myG():
...  yield 1
...  yield 2
...  yield 3
...
>>>g=myG()
>>>next(g)
1
>>>next(g)
2
>>>next(g)
3
>>>next(g)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
StopIteration
>>>g2=myG()
>>>for i in g2:
...  print(i)
1
2
3
Copy after login

Generator expression
The
for...[if]... statement can concisely build a List, and can also be used to build a generator.

>>>a=[7,8,9]
>>>b=[i**2 for i in a]
>>>b
[49, 64, 81]
>>>ib=(i**2 for i in a)
>>>ib
<generator object <genexpr> at 0x7f72291217e0>
>>>next(ib)
49
>>>next(ib)
64
>>>next(ib)
81
>>>next(ib)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
StopIteration

Copy after login

The difference between iterator and generator
Iterator is a more abstract concept, any object, if its class has next method (next python3) and iter method return itself.

Every generator is an iterator, but not the other way around. Typically a generator is generated by calling a function s composed of one or more yield expressions. It also satisfies the definition of an iterator.

When you need a class to have some custom methods in addition to the characteristics of a generator, you can use a custom iterator. Generally speaking, generators are more convenient and simpler.

def squares(start, stop):
  for i in xrange(start, stop):
    yield i*i
Copy after login

Equivalent to generator expression:

(i*i for i in xrange(start, stop))
Copy after login

The list in reverse form is:

[i*i for i in xrange(start, stop)]
Copy after login

If you are building a custom iterator:

class Squares(object):
  def __init__(self, start, stop):
    self.start = start
    self.stop = stop
  def __iter__(self):
    return self
  def next(self):
    if self.start >= self.stop:
      raise StopIteration
    current = self.start * self.start
    self.start += 1
    return current
Copy after login

At this point, you can also define your own methods such as:

def current(self):
  return self.start
Copy after login

The same point between the two: after the object is iterated, the iteration cannot be rewritten.

Statement of this Website
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

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

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What are the advantages and disadvantages of templating? What are the advantages and disadvantages of templating? May 08, 2024 pm 03:51 PM

What are the advantages and disadvantages of templating?

Google AI announces Gemini 1.5 Pro and Gemma 2 for developers Google AI announces Gemini 1.5 Pro and Gemma 2 for developers Jul 01, 2024 am 07:22 AM

Google AI announces Gemini 1.5 Pro and Gemma 2 for developers

How to download deepseek Xiaomi How to download deepseek Xiaomi Feb 19, 2025 pm 05:27 PM

How to download deepseek Xiaomi

How do you ask him deepseek How do you ask him deepseek Feb 19, 2025 pm 04:42 PM

How do you ask him deepseek

How to save the evaluate function How to save the evaluate function May 07, 2024 am 01:09 AM

How to save the evaluate function

What software is NET40? What software is NET40? May 10, 2024 am 01:12 AM

What software is NET40?

How to search deepseek How to search deepseek Feb 19, 2025 pm 05:18 PM

How to search deepseek

What language is the browser plug-in written in? What language is the browser plug-in written in? May 08, 2024 pm 09:36 PM

What language is the browser plug-in written in?

See all articles