真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么在Python中使用迭代器和生成器-創(chuàng)新互聯(lián)

怎么在Python中使用迭代器和生成器?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

創(chuàng)新互聯(lián)是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專(zhuān)注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開(kāi)發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站模板,微信公眾號(hào)開(kāi)發(fā),軟件開(kāi)發(fā),小程序設(shè)計(jì),十多年建站對(duì)銅雕雕塑等多個(gè)方面,擁有多年的網(wǎng)站推廣經(jīng)驗(yàn)。

迭代器和生成器

迭代器

  • 每次可以返回一個(gè)對(duì)象元素的對(duì)象,例如返回一個(gè)列表。我們到目前為止使用的很多內(nèi)置函數(shù)(例如 enumerate)都會(huì)返回一個(gè)迭代器。

  • 是一種表示數(shù)據(jù)流的對(duì)象。這與列表不同,列表是可迭代對(duì)象,但不是迭代器,因?yàn)樗皇菙?shù)據(jù)流。

生成器

  • 是使用函數(shù)創(chuàng)建迭代器的簡(jiǎn)單方式。也可以使用類(lèi)定義迭代器

下面是一個(gè)叫做 my_range 的生成器函數(shù),它會(huì)生成一個(gè)從 0 到 (x - 1) 的數(shù)字流:

def my_range(x):
  i = 0
  while i < x:
    yield i
    i += 1

該函數(shù)使用了 yield 而不是關(guān)鍵字 return。這樣使函數(shù)能夠一次返回一個(gè)值,并且每次被調(diào)用時(shí)都從停下的位置繼續(xù)。關(guān)鍵字 yield 是將生成器與普通函數(shù)區(qū)分開(kāi)來(lái)的依據(jù)。

因?yàn)樯鲜龃a會(huì)返回一個(gè)迭代器,因此我們可以將其轉(zhuǎn)換為列表或用 for 循環(huán)遍歷它,以查看其內(nèi)容。例如,下面的代碼:

for x in my_range(5):
  print(x)

輸出如下:

0
1
2
3
4

為何要使用生成器?

  • 生成器是構(gòu)建迭代器的 “懶惰” 方式。當(dāng)內(nèi)存不夠存儲(chǔ)完整實(shí)現(xiàn)的列表時(shí),或者計(jì)算每個(gè)列表元素的代價(jià)很高,你希望盡量推遲計(jì)算時(shí),就可以使用生成器。但是這些元素只能遍歷一次。

  • 由于使用生成器是一次處理一個(gè)數(shù)據(jù),在內(nèi)存和存儲(chǔ)的需求上會(huì)比使用list方式直接全部生成再存儲(chǔ)節(jié)省很多資源。由此區(qū)別,在處理大量數(shù)據(jù)時(shí),經(jīng)常使用生成器初步處理數(shù)據(jù)后,再進(jìn)行長(zhǎng)期存儲(chǔ),而不是使用 list。

  • 因?yàn)闊o(wú)論使用生成器還是 list,都是使用過(guò)就要丟棄的臨時(shí)數(shù)據(jù)。既然功能和結(jié)果一樣,那就不如用生成器。

  • 但是生成器也有自己的局限,它產(chǎn)生的數(shù)據(jù)不能回溯,不像list可以任意選擇。

迭代器和生成器[相關(guān)練習(xí)]

請(qǐng)自己寫(xiě)一個(gè)效果和內(nèi)置函數(shù) enumerate 一樣的生成器函數(shù)。如下所示地調(diào)用該函數(shù):

lessons = ["Why Python Programming", "Data Types and Operators", "Control Flow", "Functions", "Scripting"]
for i, lesson in my_enumerate(lessons, 1):
  print("Lesson {}: {}".format(i, lesson))

應(yīng)該會(huì)輸出:

Lesson 1: Why Python Programming
Lesson 2: Data Types and Operators
Lesson 3: Control Flow
Lesson 4: Functions
Lesson 5: Scripting

解決方案:

lessons = ["Why Python Programming", "Data Types and Operators", "Control Flow", "Functions", "Scripting"]
def my_enumerate(iterable, start=0):
  # Implement your generator function here
  i = start
  for element in iterable:
    yield i, element
    i += 1
for i, lesson in my_enumerate(lessons, 1):
  print("Lesson {}: {}".format(i, lesson))

如果可迭代對(duì)象太大,無(wú)法完整地存儲(chǔ)在內(nèi)存中(例如處理大型文件時(shí)),每次能夠使用一部分很有用。實(shí)現(xiàn)一個(gè)生成器函數(shù) chunker,接受一個(gè)可迭代對(duì)象并每次生成指定大小的部分?jǐn)?shù)據(jù)。如下所示地調(diào)用該函數(shù):

for chunk in chunker(range(25), 4):
  print(list(chunk))

應(yīng)該會(huì)輸出:

  [0, 1, 2, 3]
  [4, 5, 6, 7]
  [8, 9, 10, 11]
  [12, 13, 14, 15]
  [16, 17, 18, 19]
  [20, 21, 22, 23]
  [24]

解決方案:

def chunker(iterable, size):
  for i in range(0, len(iterable), size):
    yield iterable[i:i + size]
for chunk in chunker(range(25), 4):
  print(list(chunk))
python的五大特點(diǎn)是什么

python的五大特點(diǎn):1.簡(jiǎn)單易學(xué),開(kāi)發(fā)程序時(shí),專(zhuān)注的是解決問(wèn)題,而不是搞明白語(yǔ)言本身。2.面向?qū)ο?,與其他主要的語(yǔ)言如C++和Java相比, Python以一種非常強(qiáng)大又簡(jiǎn)單的方式實(shí)現(xiàn)面向?qū)ο缶幊獭?.可移植性,Python程序無(wú)需修改就可以在各種平臺(tái)上運(yùn)行。4.解釋性,Python語(yǔ)言寫(xiě)的程序不需要編譯成二進(jìn)制代碼,可以直接從源代碼運(yùn)行程序。5.開(kāi)源,Python是 FLOSS(自由/開(kāi)放源碼軟件)之一。

關(guān)于怎么在Python中使用迭代器和生成器問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。


文章名稱(chēng):怎么在Python中使用迭代器和生成器-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://weahome.cn/article/dgjpgs.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部