91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

如何掌握Python生成器

發布時間:2021-10-26 17:09:27 來源:億速云 閱讀:107 作者:iii 欄目:編程語言

本篇內容介紹了“如何掌握Python生成器”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1. 什么是可迭代對象?

可迭代對象,英文Iterable,是一個形容詞,這類對象和Java語言類似,都可看作是一類接口,抽象地描述事物具備怎樣的能力。所以,Iterable自然具備可迭代能力。

如下,常見的list,Iterator等都是Iterable對象:

In [33]: from collections.abc import Iterable,Iterator                        In [34]: issubclass(list,Iterable)                                           Out[34]: True  In [35]: issubclass(Iterator,Iterable)

2. 什么是一個生成器?

生成器是可迭代的(Iterable),最簡單的創建生成器方法是通過一對(),如下所示:

In [37]: g = (i*i for i in [1,4,0])                                           In [38]: g                                                                   Out[38]: <generator object <genexpr> at 0x7fe8956e96d0>

g 是一個生成器對象,generator object

獲取生成器對象的元素,可使用next函數,如下所示,獲取第一個元素:

In [39]: next(g)                                                             Out[39]: 1

獲取第二個元素:

In [40]: next(g)                                                             Out[40]: 16

3. 創建生成器的幾種方法?

如上所見,使用一對()能夠創建一個生成器對象。

除此之外,想必大家也都知道,是使用關鍵字 yield. yield出現在一個函數中,運行到yield處,返回的對象便是生成器對象(generator  object).

4. 生成器是迭代器嗎?

生成器對象(generator object)一定也是迭代器對象(Iterator  object),如上面的生成器g,使用內置函數isinstance驗證,返回True:

In [43]: isinstance(g,Iterator)                                              Out[43]: True

因此,它具備一切迭代器的特性,關于迭代器我們已在上一個話題討論,簡而言之,迭代器的幾個特點:

  • 是有去無回的,

  • 迭代器無需提前知道整個列表的所有元素,

  • 無需加載所有元素到RAM中盡而它是節省內存的(memory-efficient).

生成器同樣具備這些特性。除此之外,它還有一些獨有的特性,下面跟隨yield 我們便能看出來。

5. 如何用一句話描述 yield?

如何掌握Python生成器

yield 關鍵字的用法在stackoverflow上也是最熱的問題之一,借用一個最熱回答中的解釋:

 yield is a keyword that is used like return, except the function will return  a generator.

yield 是一個特殊的return, 它返回一個生成器對象。

說實話,理解這些只是皮毛。那么,如何精通yield的用法呢?

6. 如何精通yield的用法?

要想精通yield,你必須首先搞清楚一點:

當你調用帶有yield的函數時,函數并沒有執行任何一行,只是返回一個生成器對象

為了幫助大家理解,創建一個帶有yield的函數:

def gfun():     mylist = range(3)     for i in mylist:         yield i*i  g = gfun() print(g)

為了加深印象,你可以自己調試驗證一遍,函數第一行打的斷點始終未被命中。

帶yield的函數和for結合使用,第一次調用上一步創建的生成器對象后,將會進入函數體直到遇到yield返回值。

然后,for循環再進入函數時,直接跑到yield的下一句。直到生成器對象變空為止。

使用下面代碼演示yield的上面過程:

def createGenerator():     mylist = range(3)     for i in mylist:         yield i*i         print(i*i)  g = createGenerator() print(g) for gi  in g:     pass

參考錄制的gif:

如何掌握Python生成器

7. yield 都有哪些重要價值?

Python引入yield后,便擁有具備實現協程的能力,協程的確是一種高效的編程模型,關于協程的理解,后面專題會詳細討論。包括更高級的功能如異步等,根基都是yield.

8. yield 和 itertools

yield重要性和使用廣泛性還提現在,Python單獨一個模塊專門用于管理迭代器和生成器對象,便是itertools,里面封裝的方法特性后面再討論。

9. yield 使用案例

yield實現浮點數步長的frange:

def frange(start,end,step):     i = start     while i<end:         yield round(i,3)         i+=step

調用frange:

for item in frange(10,14,0.8):     print(item)

結果:

10 10.8 11.6 12.4 13.2

“如何掌握Python生成器”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

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

AI

英超| 宁国市| 五寨县| 渑池县| 乌海市| 十堰市| 比如县| 岑溪市| 乐平市| 正镶白旗| 房山区| 朝阳区| 黎平县| 宁化县| 乐山市| 永丰县| 肇源县| 丘北县| 乐陵市| 渭南市| 睢宁县| 邵东县| 谢通门县| 浦城县| 饶平县| 闻喜县| 太康县| 内黄县| 洞口县| 井冈山市| 延津县| 修水县| 洛阳市| 宝清县| 图木舒克市| 子长县| 龙川县| 华容县| 霍州市| 施甸县| 遵义市|