一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python中yield返回生成器的詳細方法

Python中yield返回生成器的詳細方法

2022-02-24 00:01python學習者0 Python

這篇文章主要介紹了Python中的yield返回生成器,生成器是Python編程進階中的重要知識點,需要的朋友可以參考下,希望能夠給你帶來幫助

最簡單、直觀的認識,將 yield 看做 return 對待,只是 return 返回一個值,而 yield 返回一個生成器。

要理解 yield 的作用,必須理解生成器是什么?

在理解生成器之前,必須先理解迭代器。

一、迭代器

逐項讀取列表,稱為迭代。

?
1
2
3
mylist = [1, 2, 3]
for i in mylist: # 可迭代對象
    print(i)

列表解析式同樣是一個迭代器。

?
1
2
3
4
5
6
7
8
mylist = [x*x for x in range(3)]
for i in mylist:
    print(i)
'''
0
1
4
'''

所有 for...in... 都是迭代器,包括列表、字符串、文件等等。

但是,迭代器所有的值都存儲在內存中,十分浪費內存。

因此有了生成器的概念。

二、生成器

生成器是一種迭代器,這種迭代器只能迭代一次。

生成器不會一次性存儲所有的值,而是會動態的生成值。

?
1
2
3
mygenerator = (x*x for x in range(3))
for i in mygenerator:
    print(i)

生成器只可執行一次,再次執行時不會輸出任何東西。

三、yield

1.例子一

yield 類似于 return 關鍵字,只是函數將返回一個生成器。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
# 創建生成器
def createGenerator():
    mylist = range(10)
    for i in mylist:
        print(i) # 驗證函數調用時并無執行
        yield i*i
mygenerator = createGenerator()   
print(mygenerator)
# <generator object createGenerator at 0x0000029E88FDCA50>
# 使用生成器
for i in mygenerator:
    print(i)
# 再次執行 返回為空 沒有值了

函數將返回一組只需要讀取一次的值,可以大大的提升代碼性能。

在調用函數時,函數體中的代碼并不會執行,函數只返回生成器對象。

代碼每次從使用生成器時停止的地方繼續。

2.例子二

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#Python學習交流群:531509025
# 學習另外一個例子
def foo():
    print("starting...")
    while True:
        res = yield 4 # 函數并不真正執行
        print("res:", res)
g = foo() # 得到一個生成器對象
print(next(g)) # 真正執行
print("*"*20)
print(next(g)) # 從上一次停止的地方繼續執行
'''
starting...
4
********************
res: None
4
'''
print(g.send(7))

執行 yield 之后,才會跳出 while 循環。

next 函數用于執行下一步操作。

send 函數用于發送一個參數給生成器。且 send 方法中包含 next 方法。

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!

原文鏈接:https://www.cnblogs.com/xxpythonxx/p/15463109.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产成人精品曰本亚洲77美色 | 91麻豆精东果冻天美传媒老狼 | 美女校花被调教出奶水 | 亚洲国产精品自在自线观看 | 亚洲高清在线精品一区 | 日日操视频 | 黄漫在线播放 | 亚洲天堂色图 | 大好硬好深好爽想要视频 | 国产日韩欧美不卡www | 欧美成人aaaa免费高清 | 久久精品一卡二卡三卡四卡视频版 | 欧美亚洲国产精品久久久 | 国内精品91最新在线观看 | 91精品手机国产露脸 | 免费午夜影院 | 亚洲国产精品婷婷久久久久 | 三星w699 | caoporn超碰最新地址进入 | 星星动漫无删减在线观看 | 精久久| 极品主播的慰在线播放 | 91精品国产高清久久久久 | 无人区1免费完整观看 | 亚洲第五色综合网啪啪 | 欧美人与日本人xx在线视频 | 免费网站直接进入 | caoporm碰最新免费公开视频 | 亚洲精品国产一区二区三区在 | 天天综合网天天做天天受 | 国产亚洲精品自在线亚洲情侣 | 奇米影视小说 | 国产精品色片 | 教师系列 大桥未久在线 | 久久re热在线视频精6 | caoporm碰最新免费公开视频 | jizz 日本亚洲| 成在线人免费 | 天堂成人在线 | 高跟丝袜人妖sissy露出调教 | 国内久久|