生成器: 節(jié)省空間
創(chuàng)新互聯(lián)建站主營馬邊彝族網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,APP應(yīng)用開發(fā),馬邊彝族h5微信小程序搭建,馬邊彝族網(wǎng)站營銷推廣歡迎馬邊彝族等地區(qū)企業(yè)咨詢
# generator 生成器
f = [i for i in range(1,1001)] # 列表
f = (i for i in range(1,1001)) # 生成器
在創(chuàng)建列表是,會在內(nèi)存中全部創(chuàng)建出來,而生成器不會全部創(chuàng)建出來,而是使用一個(gè)就創(chuàng)建一個(gè),結(jié)束后會被當(dāng)垃圾回收掉
# 垃圾回收機(jī)制 只要符合沒有被對象引用,python就會自動清理內(nèi)存
# 使用方法
f.__next__() # 魔法方法,盡量不用
next(f) # 與f.__next__相同
生成器的創(chuàng)建
1. (i for i in range(1,10))
2. yeld 關(guān)鍵字
def f(): # 生成器
print("f1")
yield 1 # 掛起(暫停)
print("f2")
yield 2
g = f() # 使用時(shí)必須賦值給一個(gè)變量
next(g) # f1
print(next(g)) # f2 2
可迭代對象:
for i in 可迭代對象:
print(i)
# 可以for循環(huán)的都是可迭代對象
# 內(nèi)置有iter方法的就是可迭代對象
生成器其實(shí)就是迭代器
l = [i for i in range(1,10)]
li = l.__iter__() # 返回一個(gè)可迭代對象
li = iter(l) # 一般用這個(gè)
# 這里li就是迭代器 l就是可迭代對象
# 迭代器滿足2個(gè)方法
1. 有iter方法
2. 有next方法
遍歷原理:
li = ["a","b","c"]
for i in li:
print(i) # 本質(zhì)就是使用了迭代器原理 next來做到遍歷
# 遍歷的本質(zhì)的將 可迭代類型,轉(zhuǎn)為了迭代器
# 然后不斷的 next() 將其元素,從頭到尾全部輸出
# 1. d = li.__iter__()
# 2. 不斷 i = next(d)
# 3. print(i)