亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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é)過(guò)一種方式叫生成器表達(dá)式,例如:

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

這就不說(shuō)了。

  • 生成器函數(shù)

生成器函數(shù),就是說(shuō)定義函數(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è)地方開(kāi)始(就是生成器的特點(diǎn))。

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

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

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

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

相當(dāng)于

def inc2():
    yield from range(10000)

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

python生成器和yield語(yǔ)句

生成器

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

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

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

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

#傳統(tǒng)方式
def get_even01():
	#做一個(gè)容器來(lái)存儲(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來(lái)迭代re,因?yàn)樯善饕彩强傻鷮?duì)象(有__iter__()方法)
	print(item)

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

yield語(yǔ)句

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

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

#為了不拋出異常,改寫(xiě)上面的代碼
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 實(shí)現(xiàn)Flask中返回圖片流給前端展示

    python 實(shí)現(xiàn)Flask中返回圖片流給前端展示

    今天小編就為大家分享一篇python 實(shí)現(xiàn)Flask中返回圖片流給前端展示,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • Python連接和操作PostgreSQL數(shù)據(jù)庫(kù)的流程步驟

    Python連接和操作PostgreSQL數(shù)據(jù)庫(kù)的流程步驟

    PostgreSQL 是一種開(kāi)源的對(duì)象關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(ORDBMS),以其強(qiáng)大的功能和穩(wěn)定性而廣受歡迎,本文將詳細(xì)介紹如何使用 Python 連接和操作 PostgreSQL 數(shù)據(jù)庫(kù),需要的朋友可以參考下
    2024-10-10
  • Python 管理依賴包工具pip, virtualenv詳解

    Python 管理依賴包工具pip, virtualenv詳解

    管理依賴包是Python開(kāi)發(fā)中不可或缺的一部分,通過(guò)pip、virtualenv和pipenv等工具,我們可以有效地管理包和虛擬環(huán)境,確保項(xiàng)目的可移植性和一致性,這篇文章主要介紹了Python 管理依賴包(pip, virtualenv),需要的朋友可以參考下
    2024-07-07
  • python 正則式 概述及常用字符

    python 正則式 概述及常用字符

    python 正則,剛開(kāi)始需要注意的他的正則的獨(dú)特的地方。不同語(yǔ)言的正則稍有不同。
    2009-05-05
  • Python中rasterio庫(kù)的實(shí)現(xiàn)

    Python中rasterio庫(kù)的實(shí)現(xiàn)

    Rasterio是一個(gè)用于讀寫(xiě)光柵數(shù)據(jù)的Python庫(kù),它專注于快速和可靠地處理大規(guī)模地理空間柵格數(shù)據(jù),本文主要介紹了Python中rasterio庫(kù)的實(shí)現(xiàn),感興趣的可以了解一下
    2025-04-04
  • Python實(shí)現(xiàn)配置文件備份的方法

    Python實(shí)現(xiàn)配置文件備份的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)配置文件備份的方法,實(shí)例分析了基于Linux平臺(tái)下Python文件壓縮備份的相關(guān)技巧,具有一定參考借鑒價(jià)值
    2015-07-07
  • Python可變參數(shù)*args和**kwargs

    Python可變參數(shù)*args和**kwargs

    本文我們將通過(guò)示例了解 Python函數(shù)的可變參數(shù)*args和?**kwargs的用法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • matplotlib設(shè)置顏色、標(biāo)記、線條,讓你的圖像更加豐富(推薦)

    matplotlib設(shè)置顏色、標(biāo)記、線條,讓你的圖像更加豐富(推薦)

    這篇文章主要介紹了matplotlib設(shè)置顏色、標(biāo)記、線條,讓你的圖像更加豐富,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • python3的map與reduce實(shí)例詳解

    python3的map與reduce實(shí)例詳解

    這篇文章主要介紹了Python3中map()、reduce()、filter()的用法詳解,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • Python操作Redis之設(shè)置key的過(guò)期時(shí)間實(shí)例代碼

    Python操作Redis之設(shè)置key的過(guò)期時(shí)間實(shí)例代碼

    這篇文章主要介紹了Python操作Redis之設(shè)置key的過(guò)期時(shí)間實(shí)例代碼,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01

最新評(píng)論