中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Python中使用迭代器和生成器

發布時間:2021-05-12 17:12:26 來源:億速云 閱讀:142 作者:Leah 欄目:開發技術

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

迭代器和生成器

迭代器

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

  • 是一種表示數據流的對象。這與列表不同,列表是可迭代對象,但不是迭代器,因為它不是數據流。

生成器

  • 是使用函數創建迭代器的簡單方式。也可以使用類定義迭代器

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

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

該函數使用了 yield 而不是關鍵字 return。這樣使函數能夠一次返回一個值,并且每次被調用時都從停下的位置繼續。關鍵字 yield 是將生成器與普通函數區分開來的依據。

因為上述代碼會返回一個迭代器,因此我們可以將其轉換為列表或用 for 循環遍歷它,以查看其內容。例如,下面的代碼:

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

輸出如下:

0
1
2
3
4

為何要使用生成器?

  • 生成器是構建迭代器的 “懶惰” 方式。當內存不夠存儲完整實現的列表時,或者計算每個列表元素的代價很高,你希望盡量推遲計算時,就可以使用生成器。但是這些元素只能遍歷一次。

  • 由于使用生成器是一次處理一個數據,在內存和存儲的需求上會比使用list方式直接全部生成再存儲節省很多資源。由此區別,在處理大量數據時,經常使用生成器初步處理數據后,再進行長期存儲,而不是使用 list。

  • 因為無論使用生成器還是 list,都是使用過就要丟棄的臨時數據。既然功能和結果一樣,那就不如用生成器。

  • 但是生成器也有自己的局限,它產生的數據不能回溯,不像list可以任意選擇。

迭代器和生成器[相關練習]

請自己寫一個效果和內置函數 enumerate 一樣的生成器函數。如下所示地調用該函數:

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))

應該會輸出:

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))

如果可迭代對象太大,無法完整地存儲在內存中(例如處理大型文件時),每次能夠使用一部分很有用。實現一個生成器函數 chunker,接受一個可迭代對象并每次生成指定大小的部分數據。如下所示地調用該函數:

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

應該會輸出:

  [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的五大特點是什么

python的五大特點:1.簡單易學,開發程序時,專注的是解決問題,而不是搞明白語言本身。2.面向對象,與其他主要的語言如C++和Java相比, Python以一種非常強大又簡單的方式實現面向對象編程。3.可移植性,Python程序無需修改就可以在各種平臺上運行。4.解釋性,Python語言寫的程序不需要編譯成二進制代碼,可以直接從源代碼運行程序。5.開源,Python是 FLOSS(自由/開放源碼軟件)之一。

關于怎么在Python中使用迭代器和生成器問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丹巴县| 即墨市| 姜堰市| 安远县| 鹤岗市| 岗巴县| 钟祥市| 靖安县| 兴和县| 宁晋县| 明水县| 咸阳市| 昌乐县| 河间市| 繁昌县| 奉化市| 巩留县| 静安区| 新郑市| 北辰区| 沙田区| 苏州市| 高陵县| 上栗县| 三门峡市| 江门市| 洪湖市| 郧西县| 密山市| 东乌珠穆沁旗| 林口县| 疏勒县| 紫金县| 孟连| 柳州市| 安新县| 河曲县| 河北省| 淮滨县| 荃湾区| 多伦县|