最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python的生成器函數(shù)詳解

 更新時(shí)間:2024年02月19日 09:04:10   作者:LittleHuang950620  
這篇文章主要介紹了Python的生成器函數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Python的生成器函數(shù)

生成器的概念

生成器是Python中的一個(gè)對(duì)象,對(duì)這個(gè)對(duì)象進(jìn)行操作,可以依次生產(chǎn)出按生成器內(nèi)部運(yùn)算產(chǎn)生的數(shù)據(jù)。

但是要注意,如果不對(duì)生成器進(jìn)行操作,是不會(huì)產(chǎn)生數(shù)據(jù)的。

稱這樣的方式為惰性求值,延或者遲求值。

構(gòu)造生成器

  • 生成器表達(dá)式

以前學(xué)過一種方式叫生成器表達(dá)式,例如:

g1 = (x*2 for x in range(5))
next(g1)
0
next(g1)
2
...

這就不說了。

  • 生成器函數(shù)

生成器函數(shù),就是說定義函數(shù)時(shí),內(nèi)部帶yield就算生成器函數(shù)。

每次返回的值就是yield后面的值,例如:

def g2():
    for x in range(5):
        yield x*2

list(g2)
[0, 2, 4, 6, 8]

這個(gè)yield很牛逼,和return一樣,遇到之后就返回后面的值,但是yield會(huì)記住當(dāng)時(shí)執(zhí)行到哪里了,下一次執(zhí)行從這個(gè)地方開始(就是生成器的特點(diǎn))。

生成器函數(shù)的語法糖

就是yield from 語法,一種看起來簡(jiǎn)潔的表達(dá)形式吧。

普通形式的生成器函數(shù):

def inc1():
    for x in range(10000):
        yield x

相當(dāng)于

def inc2():
    yield from range(10000)

也就是說,yield from iterable 相當(dāng)于 yield item for item in iterable。

python生成器和yield語句

生成器

  • 生成器是可以動(dòng)態(tài)(循環(huán)一次計(jì)算一次返回一次)提供數(shù)據(jù)的可迭代對(duì)象(所以屬于可迭代對(duì)象,即有__iter__()和__next__())
  • 不必創(chuàng)建容器存儲(chǔ)完整的結(jié)果,而節(jié)省內(nèi)存空間(延遲/惰性操作)
  • 含有yield語句的函數(shù)為生成器函數(shù),返回值為生成器對(duì)象

普通可迭代對(duì)象和生成器對(duì)比

定義函數(shù),獲取列表中所有偶數(shù)

list01 = [4,54,65,6,76,87,9]

#傳統(tǒng)方式
def get_even01():
	#做一個(gè)容器來存儲(chǔ)數(shù)據(jù)
	result = []
	for item in list01:
		if item % 2 == 0:
			result.append(item)
	return result

re = get_even01()
for item in re:
	print(item)

#使用生成器技術(shù)
def get_even02():
	for item in list01:
		if item % 2 == 0:
			yield item	#yield是生成器的關(guān)鍵詞

re = get_even02()	#返回一個(gè)生成器對(duì)象
for item in re:	#使用for來迭代re,因?yàn)樯善饕彩强傻鷮?duì)象(有__iter__()方法)
	print(item)

使用生成器的最大作用是節(jié)省內(nèi)存

yield語句

def f1():
	for i in range(2):
		yield i
		
g = f1()	

print(g.__next__())	#0
print(g.__next__())	#1
print(g.__next__())	#拋出異常StopIteration

#為了不拋出異常,改寫上面的代碼
def f1():
	for i in range(2):
		yield i
g = f1()
while True:
	try:
		print(g.__next__())
	except Exception as e:	#捕獲異常,結(jié)束循環(huán)
		break		

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入解析python項(xiàng)目引用運(yùn)行路徑

    深入解析python項(xiàng)目引用運(yùn)行路徑

    這篇文章主要介紹了python項(xiàng)目引用運(yùn)行路徑的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • python中argparse模塊基礎(chǔ)及使用步驟

    python中argparse模塊基礎(chǔ)及使用步驟

    argsparse是python的命令行解析的標(biāo)準(zhǔn)模塊,內(nèi)置于python,不需要安裝。這個(gè)庫可以讓我們直接在命令行中就可以向程序中傳入?yún)?shù)并讓程序運(yùn)行,接下來通過本文給大家介紹python argparse模塊的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2022-06-06
  • 利用numpy+matplotlib繪圖的基本操作教程

    利用numpy+matplotlib繪圖的基本操作教程

    這篇文章主要給大家介紹了利用numpy+matplotlib繪圖的基本操作,文中介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)matplotlib繪圖具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-05-05
  • pycharm中import呈現(xiàn)灰色原因的解決方法

    pycharm中import呈現(xiàn)灰色原因的解決方法

    這篇文章主要介紹了pycharm中import呈現(xiàn)灰色原因的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Python Django搭建文件下載服務(wù)器的實(shí)現(xiàn)

    Python Django搭建文件下載服務(wù)器的實(shí)現(xiàn)

    這篇文章主要介紹了Python Django搭建文件下載服務(wù)器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 對(duì)python列表里的字典元素去重方法詳解

    對(duì)python列表里的字典元素去重方法詳解

    今天小編就為大家分享一篇對(duì)python列表里的字典元素去重方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python?mxnet包成功安裝詳細(xì)指南(避免踩坑+報(bào)錯(cuò))

    Python?mxnet包成功安裝詳細(xì)指南(避免踩坑+報(bào)錯(cuò))

    這篇文章主要給大家介紹了關(guān)于Python?mxnet包成功安裝的相關(guān)資料,包括創(chuàng)建Python環(huán)境、激活環(huán)境、安裝MXNet及其依賴項(xiàng),以及在PythonCharm中配置Python解釋器,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • python的pytest框架之命令行參數(shù)詳解(上)

    python的pytest框架之命令行參數(shù)詳解(上)

    這篇文章主要介紹了python的pytest框架之命令行參數(shù)詳解,pytest是一款強(qiáng)大的python自動(dòng)化測(cè)試工具,可以勝任各種類型或者級(jí)別的軟件測(cè)試工作。pytest提供了豐富的功能,包括assert重寫,第三方插件,需要的朋友可以參考下
    2019-06-06
  • Python使用struct庫的用法小結(jié)

    Python使用struct庫的用法小結(jié)

    struct模塊執(zhí)行Python值和以Python?bytes表示的C結(jié)構(gòu)體之間的轉(zhuǎn)換,這可以用于處理存儲(chǔ)在文件中或來自網(wǎng)絡(luò)連接以及其他源的二進(jìn)制數(shù)據(jù),下面介紹下Python使用struct庫的用法,感興趣的朋友一起看看吧
    2022-05-05
  • Python+pyqt實(shí)現(xiàn)即時(shí)進(jìn)制轉(zhuǎn)換計(jì)算器

    Python+pyqt實(shí)現(xiàn)即時(shí)進(jìn)制轉(zhuǎn)換計(jì)算器

    在數(shù)字系統(tǒng)廣泛應(yīng)用的今天,快速準(zhǔn)確地實(shí)現(xiàn)二進(jìn)制和十進(jìn)制之間的轉(zhuǎn)換是程序員和工程師的常見需求,本文將使用Python和pyqt實(shí)現(xiàn)即時(shí)進(jìn)制轉(zhuǎn)換計(jì)算器,需要的小伙伴可以了解下
    2025-09-09

最新評(píng)論

凉城县| 万年县| 曲阜市| 德保县| 宣武区| 沙田区| 杂多县| 上高县| 北流市| 长治市| 临朐县| 聂荣县| 都昌县| 类乌齐县| 襄城县| 富川| 栖霞市| 高唐县| 绿春县| 恩平市| 柞水县| 山丹县| 岳池县| 邵东县| 晋江市| 怀来县| 牡丹江市| 上思县| 宁化县| 辉南县| 青龙| 五寨县| 开阳县| 都昌县| 甘肃省| 胶州市| 久治县| 寿宁县| 工布江达县| 平安县| 炎陵县|