1. 程式人生 > >python全棧開發 * 13知識點匯總 * 180619

python全棧開發 * 13知識點匯總 * 180619

IT 知識 叠代器 ati 定義 訪問 分批 不能 知識點


13 叠代器和?成器
一.叠代器
1.以通過dir函數來查看類中定義好的所有?法
2.__iter__ 用來獲取當前對象的叠代器
3.__next__ 獲取可叠代對象的元素
s="我愛吃火鍋"
ret=dir(s) # 查看字符串s中定義好的所有方法
print(ret)
it=s.__iter__() # 用來獲取當前對象的叠代器
print(it.__next__()) # 獲取可叠代對象的元素 第一個
print(it.__next__())
print(it.__next__())
print(it.__next__())
print(it.__next__()) # 最後一個元素後.繼續__next__會報錯 stop iteration


def func(): #一次把可叠代對象元素循環遍歷出來
lst = []
for i in range(0, 10000):
lst.append("服裝"+str(i))
return lst
print(func())

def func():
for i in range(0,10000):
yield "服裝"+str(i)
gen=func()
for i in range(0,65): # 分批次按需求來拿元素
ret=gen.__next__()
print(ret)
二.生成器

1.什麽是生成器 ?成器實質就是叠代器
2.在python中有三種?式來獲取?成器:
(1)通過生成器函數
def func():
print((111))
yield "222"
gen=func() # 如果函數中有yield,則此函數為生成器函數
ret=gen.__next__() # 生成器實質是叠代器,可直接執行__next__()
print(ret)
(2)yield 和return 的區別.
# 程序中有yield ,函數是生成器函數,訪問生成器函數,函數不會執行,返回一個生成器.
# 生成器執行__next__,執行到下一個yield.

# yield 和return 基本相同,只是yield只負責返回,不會結束函數
# return 結束函數
(3) 生成器的作用 : 節省內存
(4) send 和 yield 的區別:send 給上一個yield位置傳遞一個值進去.但是__next__不能. 不能給最後?個yield發送值
(5) send() 第一次必須用__next__ (因為上面沒有yield了.
def func():
print("想吃飯了")
a=yield "想吃麻辣燙"
print("想吃"+a)
b=yield "還想吃什麽"
print("想吃"+b)
c=yield "呷哺呷哺"
print(c)
gen=func()
ret=gen.__next__()
print(ret)
ret1=gen.send("麻辣小龍蝦")
print(ret1)
ret2=gen.send("海底撈")
print(ret2)

python全棧開發 * 13知識點匯總 * 180619