日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python生成器 图片分类_Python内置类型(6)——生成器

發(fā)布時間:2025/3/12 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python生成器 图片分类_Python内置类型(6)——生成器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

上節(jié)內(nèi)容說到Python的for語句循環(huán)本質(zhì)上就是通過調(diào)用Iterable可迭代對象的__iter()__方法獲得一個Iterator迭代器對象,然后不斷調(diào)用Iterator迭代器對象__next()__方法實現(xiàn)的。Iterator迭代器對象則是一個需要實現(xiàn)__iter__()和__next__()兩個迭代器協(xié)議方法的對象。python中生成器提供了一種方便的方法來實現(xiàn)迭代器協(xié)議,而不需要必須實現(xiàn)__iter__()和__next__()兩個迭代器協(xié)議方法。

生成器的定義方式有兩種,一種是調(diào)用生成器函數(shù),一種是使用生成器表達式語法。

調(diào)用生成器函數(shù)

生成器函數(shù)是指在函數(shù)體中使用yield表達式僅返回結(jié)果的函數(shù)。yield表達式僅在定義生成器函數(shù)時使用,因此只能用在函數(shù)定義的主體中。在函數(shù)體中使用yield表達式會使該函數(shù)成為生成器函數(shù)。當生成器函數(shù)被調(diào)用時,它返回一個稱為生成器的迭代器,該迭代器由python自動生成。然后,生成器控制了生成器函數(shù)的執(zhí)行。因為返回的生成器是一個迭代器,所以生成器函數(shù)的執(zhí)行結(jié)果也就可以被循環(huán)。當生成器的的__next__方法被調(diào)用時,生成器函數(shù)的函數(shù)體內(nèi)的語句開始執(zhí)行,執(zhí)行進行到第一個yield表達式時,立即將yield表達式的結(jié)果返回給生成器的調(diào)用者,同時將生成器函數(shù)內(nèi)部的狀態(tài)掛起。即保持生成器函數(shù)的執(zhí)行進度,和生成器函數(shù)內(nèi)的局部狀態(tài):包括局部變量的當前綁定,指令指針,內(nèi)部計算棧和任何異常處理的狀態(tài)。當生成器的再次調(diào)用__next__方法來時,生成器函數(shù)恢復(fù)執(zhí)行,并再次執(zhí)行到y(tǒng)ield表達式返回結(jié)果再保持狀態(tài),直到無法再執(zhí)行到y(tǒng)ield表達式。此時生成器自動拋出StopIteration異常。

我們先定義一個簡單生成器函數(shù),函數(shù)功能返回數(shù)字0-9的平方數(shù)

# 生成器函數(shù),功能返回數(shù)字0-9的平方數(shù)

>>> def squares():

for i in range(10):

yield i**2

# 使用return關(guān)鍵字是普通函數(shù),使用yield關(guān)鍵字函數(shù)變成了生成器函數(shù)

使用參數(shù)g接收調(diào)用生成器函數(shù)squares的結(jié)果,然后分別在shell查看squares和g這兩個變量的類型

>>> g = squares()

#查看squares對象類型

>>> squares

#查看g對象類型

>>> g

從上面可以看出變量squares是函數(shù)類型,變量g是generator類型對象,generator從字面的理解上就是生成器類型。根據(jù)上一節(jié)迭代器中提到的知識,從collection模塊引入Iterator的抽象基類,驗證下generator類型是不是上面說的迭代器類型。

>>> from collections import Iterator

>>> isinstance(g,Iterator)

True

驗證成功,說明生成器函數(shù)的執(zhí)行結(jié)果確實是生成器,一種特殊的迭代器。

>>> for i in g:

print (i)

0

1

4

9

16

25

36

49

64

81

生成器表達式

除了使用生成器函數(shù)可以得到生成器,還可以生成器表達式得到生成器表達式。生成器表達式本身看起來像列表推到, 但不是用方括號而是用圓括號包圍起來:

>>> g2 = (x**2 for x in range(10))

>>> g2

at 0x0359AFC0>

>>> t = (1,2,3,4,5)

>>> g3 = (x**2 for x in t)

>>> g3

at 0x007F6180>

驗證:

>>> isinstance(g2,Iterator)

True

>>> isinstance(g3,Iterator)

True

使用:

>>> for i in g2:

print(i)

0

1

4

9

16

25

36

49

64

81

>>> for i in g3:

print(i)

1

4

9

16

25

和普通迭代器相比,生成器不單簡化了迭代器的定義,還在使用效率上有提升。因為生成器在循環(huán)時,生成器函數(shù)每次只會返回一個結(jié)果,然后保持內(nèi)部狀態(tài),所以生成器占用的內(nèi)存是很小的。以下兩個測試結(jié)果,第一個直接拋出MemoryError異常,第二個只能正確計算出結(jié)果。

# 全部數(shù)據(jù)先加載在1個列表上面,內(nèi)存占用高

>>> s1 = sum([i for i in range(100000000)])

Traceback (most recent call last):

File "", line 1, in

s1 = sum([i for i in range(100000000)])

File "", line 1, in

s1 = sum([i for i in range(100000000)])

MemoryError

# 數(shù)據(jù)幾乎不占內(nèi)存

>>> s2 = sum((i for i in range(100000000)))

>>> s2

4999999950000000

總結(jié)

以上是生活随笔為你收集整理的python生成器 图片分类_Python内置类型(6)——生成器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩精品偷拍 | 黄色一级免费 | 在线国产黄色 | 中文字幕国产一区 | 1024毛片基地 | 亚洲中文字幕无码爆乳av | 在线观看免费黄视频 | 国产精品无码久久久久久 | 国模吧无码一区二区三区 | 91色在线视频| 久久h视频 | 久久一区欧美 | 国产精品精品久久久 | 精品日本一区二区 | 国产在线视频在线观看 | 一区二区三区免费看视频 | 欧美国产日韩视频 | 亚洲精选在线观看 | 玖玖网 | 国产精品久久国产愉拍 | 在线91av | 日本五十肥熟交尾 | 日韩av不卡电影 | 97人妻精品一区二区三区软件 | 国产成人在线视频观看 | 一眉道姑 电影 | 夜夜草av| www.jizzcom| 久久精品一区二区三区黑人印度 | 最新天堂在线视频 | 成人h片在线观看 | 欧美成人一区二免费视频软件 | 亚洲成人网在线 | 免费人成| 国产做受视频 | 8x8x国产精品一区二区 | 亚洲特黄特色 | 国产高清视频在线免费观看 | 黄色网页入口 | 成人手机在线免费视频 | 国产黄色一级网站 | av久热 | 少妇系列av| 欧美激情一二三区 | 久久久久久婷婷 | 日本黄色aaa| 快色网站| 男女男精品视频网站 | 亚洲free性xxxx护士白浆 | 猎艳山村丰满少妇 | 成人午夜淫片100集 伊人久久国产 | 天天夜夜啦啦啦 | 亚洲乱妇| 亚洲天堂视频在线观看 | 美日韩成人 | 欧美福利精品 | 99热热热热 | 欧美一级二级片 | 欧美激情免费观看 | 性大片潘金莲裸体 | 少妇做爰免费视看片 | 亚洲国产精品久久久久久 | 美女破处视频 | 欧美亚洲图片小说 | 精品日韩制服无码久久久久久 | 国产精品久久久久久人妻精品动漫 | 青青草视频免费观看 | 秋霞电影一区二区 | 操欧美女人 | 97色在线视频 | 欧美黑人又粗又大的性格特点 | 国产91在线播放九色 | 精品理论片 | 人操人人 | 夜夜骑夜夜操 | 1000部拍拍拍18勿入免费视频 | 91久久超碰 | 美女极度色诱图片www视频 | 在线观看成人av | 天天视频国产 | 国产精品久久久午夜夜伦鲁鲁 | 国产黄色三级网站 | 久久精品国产欧美亚洲人人爽 | 中文在线最新版天堂8 | 多男调教一女折磨高潮高h 国内毛片毛片毛片毛片毛片 | 日韩成人高清视频在线观看 | 成人福利视频网 | 黑人巨大精品欧美一区二区 | 亚洲免费视频网 | 色诱av手机版 | 欧美超碰在线观看 | 一区二区日韩视频 | 国内福利视频 | 亚洲一区二区三区四区五区午夜 | 在线色站 | 五月婷婷激情综合网 | 大地资源影视在线播放观看高清视频 | 黄色一级一片免费播放 | 日韩欧美国产综合 |