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

來源:互聯網
上載者:User

標籤:ati   產生   沒有   UNC   Python全棧   結束   style   end   的區別   


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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.