簡(jiǎn)單了解python 生成器 列表推導(dǎo)式 生成器表達(dá)式
生成器就是自己用python代碼寫的迭代器,生成器的本質(zhì)就是迭代器。
通過(guò)以下兩種方式構(gòu)建一個(gè)生成器:
1、通過(guò)生成器函數(shù)
2、生成器表達(dá)式
生成器函數(shù):
函數(shù)
def func1(x): x += 1 return x print(func1(5))
生成器函數(shù)
def func1(x): x += 1 yield x g_obj = func1(5) print(g_obj.__next__())
一個(gè)next對(duì)應(yīng)一個(gè)yield。
yield VS return
return 結(jié)束函數(shù),給函數(shù)的執(zhí)行者返回值
yield 不會(huì)結(jié)束函數(shù),一個(gè)next對(duì)應(yīng)一個(gè)yield,給生成器對(duì)象。__next__()返回值。
生成器函數(shù) VS 迭代器
區(qū)別1:自定制的區(qū)別:
l1 = [1,2,3,4,5] l1.__iter__() def func1(x): x += 1 yield x x += 3 yield x x += 5 yield x g1 = func1(5) print(g1.__next__()) print(g1.__next__()) print(g1.__next__())
區(qū)別2:內(nèi)存級(jí)別的區(qū)別。
迭代器是需要可迭代對(duì)象進(jìn)行轉(zhuǎn)化,可迭代對(duì)象非常占內(nèi)存
生成器直接創(chuàng)建,不需要轉(zhuǎn)化,從本質(zhì)就節(jié)省內(nèi)存
send & next
send與next一樣,也是對(duì)生成器取值(執(zhí)行一個(gè)yield)的方法。
send 可以給上一個(gè)yield傳值,第一次取值永遠(yuǎn)都是next
最后一個(gè)yield永遠(yuǎn)也得不到send的值
列表推導(dǎo)式:一行代碼搞定所需要的任何列表
循環(huán)模式 格式:[變量(加工后的變量)for 變量 in interable
lis = [i for i in range(1,101)] print(lis) lis = ['騎士計(jì)劃%s期'% i for i in range(1,16)] print(lis)
lis = [i**2 for i in range(1,11)] print(lis) print([i for i in range(1,31) if i % 3 == 0]) print([i*i for i in range(1,31) if i % 3 is 0 ])
篩選模式:
names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
print([q for name in names for q in name if q.count('e') >= 2])
列表推導(dǎo)式
優(yōu)點(diǎn):一行解決,方便
缺點(diǎn):容易著迷,不易排錯(cuò),不能超過(guò)三次循環(huán)
列表推導(dǎo)式不能解決所有列表的問(wèn)題,無(wú)需刻意使用
生成器表達(dá)式:將列表推導(dǎo)式的 [] 換成 () 即可
g = (i for i in range(199)) print(g.__next__()) print(g.__next__()) print(g.__next__()) print(g.__next__()) print(g.__next__()) print(g.__next__()) print(g.__next__())
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python?中將數(shù)字轉(zhuǎn)換為字母的方法
本文詳細(xì)介紹了在 Python 中將數(shù)字轉(zhuǎn)換為字母的幾種常用方法,我們介紹了使用 chr() 函數(shù)、string 模塊和 ord() 函數(shù)等方法,并提供了示例代碼幫助你理解和應(yīng)用這些方法,感興趣的朋友跟隨小編一起看看吧2023-06-06
pytorch: tensor類型的構(gòu)建與相互轉(zhuǎn)換實(shí)例
今天小編就為大家分享一篇pytorch: tensor類型的構(gòu)建與相互轉(zhuǎn)換實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
Python格式化字符串f-string概覽(小結(jié))
這篇文章主要介紹了Python格式化字符串f-string概覽(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
如何利用python實(shí)現(xiàn)圖片轉(zhuǎn)化字符畫(huà)
這篇文章主要介紹了如何利用python實(shí)現(xiàn)圖片轉(zhuǎn)化字符畫(huà),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06
如何利用python實(shí)現(xiàn)Simhash算法
這篇文章主要介紹了如何利用python實(shí)現(xiàn)Simhash算法,文章基于python的相關(guān)資料展開(kāi)Simhash算法的詳細(xì)介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-06-06
Python爬蟲(chóng)實(shí)例——scrapy框架爬取拉勾網(wǎng)招聘信息
這篇文章主要介紹了Python爬蟲(chóng)實(shí)例——scrapy框架爬取拉勾網(wǎng)招聘信息的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07
python數(shù)據(jù)預(yù)處理 :樣本分布不均的解決(過(guò)采樣和欠采樣)
今天小編就為大家分享一篇python數(shù)據(jù)預(yù)處理 :樣本分布不均的解決(過(guò)采樣和欠采樣),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
YOLOv8訓(xùn)練自己的數(shù)據(jù)集(詳細(xì)教程)
YOLO是一種基于圖像全局信息進(jìn)行預(yù)測(cè)的目標(biāo)檢測(cè)系統(tǒng),YOLOv8 是ultralytics公司在2023年1月10號(hào)開(kāi)源的YOLOv5的下一個(gè)重大更新版本,這篇文章主要給大家介紹了關(guān)于YOLOv8訓(xùn)練自己的數(shù)據(jù)集的相關(guān)資料,需要的朋友可以參考下2023-01-01
paramiko使用tail實(shí)時(shí)獲取服務(wù)器的日志輸出詳解
這篇文章主要給大家介紹了關(guān)于paramiko使用tail實(shí)時(shí)獲取服務(wù)器的日志輸出的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12

