A brief analysis of the role and usage of the yield keyword in Python

WBOY
Release: 2016-12-05 13:27:18
Original
1371 people have browsed it

Foreword

In order to understand what yield is, you must first understand what a generator (generator) is. Before talking about the generator, let’s talk about the iterator (iterator). When creating a list (list), you can one by one Reading each item, this is called iteration (iteration).

>>> mylist = [1, 2, 3]
>>> for i in mylist :
... print(i)
1
2
3
Copy after login

mylist is an iterable object. When you use a list comprehension to create a list, you create an iterable object:

>>> mylist = [x*x for x in range(3)]
>>> for i in mylist :
... print(i)
0
1
4
Copy after login

You can use "for... Make repeated reads. But you have to store all the elements in memory in advance, and when there are many elements in those objects, not every item will be useful to you. The generator is also an iterable object, but you can only read it once, because it does not store all values ​​in memory, it generates values ​​dynamically:

>>> mygenerator = (x*x for x in range(3))
>>> for i in mygenerator :
... print(i)
0
1
4
Copy after login
It looks like there is no difference except replacing [] with (). However, you cannot use
for i in mygenerator

again, because the generator can only be iterated once: first it calculates 0, then continues to calculate 1, then calculates 4, one after another...

yield

is a keyword similar to return , except that this function returns a generator.

>>> def createGenerator() :
... mylist = range(3)
... for i in mylist :
...  yield i*i
...
>>> mygenerator = createGenerator() # create a generator
>>> print(mygenerator) # mygenerator is an object!
<generator object createGenerator at 0xb7555c34>
>>> for i in mygenerator:
...  print(i)
0
1
4
Copy after login

This example itself is meaningless, but it clearly illustrates that the function will return a set of values ​​that can only be read once. To master yield, the first thing you must understand is: when you call the generator function, as in the above example createGenerator() , the program does not execute the code in the function body, it just returns the generator object, which is quite subtle. The code inside the function body will not run until each loop iteration (for) of the generator.

In the first iteration, your function will be executed, reaching the yield

keyword from the beginning, and then return the value after yield as the return value of the first iteration. Then, each time this function is executed, it will continue to execute what you are doing The next time in the loop defined inside the function, the value is returned until there is nothing left to return.

If the yield keyword is not defined inside the generator, then the generator is considered empty. This may happen because the loop is running out, or the if/else conditions are not met.

Summary

The above is the entire content of this article. I hope the content of this article can be helpful to everyone in learning or using python. If you have any questions, you can leave a message to communicate.

Related labels:
source:php.cn
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!