python生成器到底有什麼優點?

時間 2021-05-30 04:50:20

1樓:公子半島

一般用情況列表生成器可以直接生成列表,如果列表資料過多,這樣會占用大量記憶體。

通過生成器Generator可以生成列表的記憶體位址,從而達到想用什麼資料在取出來的效果。

列表生成器:

print [x*x for x in range(10)] -->[0, 1, 4, 9, 16, 25, 36, 49, 64, 81](直接生成list占用大量記憶體)

生成器:()

print (x*x for x in range(10)) --> at 0x0000000002F3DF78>

2樓:Seek

如果列表元素可以按照某種演算法推算出來,那我們是否可以在迴圈的過程中不斷推算出後續的元素呢?這樣就不必建立完整的list,從而節省大量的空間。在Python中,這種一邊迴圈一邊計算的機制,稱為生成器:

generator

3樓:

每天都在用生成器的,隨便說兩句

生成器,最大的優點,就是隨用隨生成(省了儲存空間),可以記錄用到那裡了(省了索引查詢位置的時間)

在空間,和時間上,在特定情況下,都有大幅度的提公升,你說他是不是神器?

在for迴圈裡面,在列表裡,是把列表中的元素,給你乙個引用,而在生成器裡,是真的按照規則給你新生出來乙個,這是完全不一樣的

4樓:北京千鋒互聯科技有限公司

生成器是只能遍歷一次的。生成器是一類特殊的迭代器,還能使用 def 定義函式。(優點)

但是,使用yield而不是return語句返回結果。yield語句一次返回乙個結果,在每個結果中間,掛起函式的狀態,以便下次從它離開的地方繼續執行。

5樓:獨和

簡單的沒他省記憶體,省記憶體的沒他簡單。惰性與自帶迭代,是生成器最大的特點。就算是無窮大的資料,也乙個乙個生成,單純這個來說,對記憶體毫無壓力。

就好像過年,是家族所有人一起來你家拜年,還是一批一批的來。招待一批,走了再招待下一批,才是大多數的情況吧。

假如沒有這個,很多大資料迴圈或者迭代,直接記憶體飆公升,甚至無法處理。比如列表推導,字典推倒導的,都是全部資料全部先放進記憶體的。就算你會其他方式,也比生成器多工作量或複雜。

6樓:不喝可樂

老套路, 上小結圖:

考慮清楚3個內容:

1.如何創造生成器? 單純的g = (x * x for x in range(10)) 至今用到任何地方過,僅用過帶yield的函式

2,生成器的核心作用: 替代函式return, 多次返回3, 帶yield函式的執行過程

7樓:兲兲冩8阿滒

這怎麼會扯上惰性求值了,生成器的原型不是continuation麼。

當然生成器只是continuation的乙個簡單的應用,continuation能幹的事情多著呢,比如最近比較流行的coroutine

8樓:

class A(object):

def __init__(self, ifrom time import sleep, time

sleep(iprint (time())[A(i) for i in range(5)](A(i) for i in range(5))試試就知道區別。道理就是 @Twisted Python 說的那兩個字。

9樓:「已登出」

生成器是可迭代物件,是惰性求值的。列表推導式產生的是乙個列表,結果已經存在於記憶體之中了。《python學習手冊》中對生成器有很詳細的描述,條件允許可以去看看。

如何最簡單 通俗地理解Python的生成器?

Python開發大佬 要了解yield的作用,就要了解什麼是生成器。要了解生成器,首先要了解迭代器。I t e r a b l e 迭代器 在建立列表時,可以逐個讀取其專案。逐項讀取的專案稱為迭代 mylist是可迭代的物件,這就是迭代。使用 for in 的所有物件都是可迭代的物件,如 list ...

在python的生成器中,連續使用兩個next函式,發現效果不一樣?

無關風月 我執行你這段程式的結果如下 looking for python None Traceback most recent call last File yield example2.py line 11,in print next g File yield example2.py line ...

離線驗證碼生成器的原理是什麼?

1.原理 這是一種動態密碼,是一種增強型的安全身份認證解決方案,實際多用做兩步認證 Two Step Authentication 或者直接代替密碼認證使用。定義可以參照 OTP wikipedia.org 的頁面 簡單來說你可以理解成這是一種利用單向雜湊函式,對特定的資料進行雜湊計算,在結果中進行...