python之路——函數迭代,產生器

來源:互聯網
上載者:User

標籤:item   結束   發送   意義   就是   告訴   strong   color   python   

---恢複內容開始---

迭代器 產生器迭代器:1, 什麼是迭代器協議

 ① dir(被測對象) 如果它含有 __iter__,那這個對象叫做可迭代對象,遵循可迭代協議。

 ②  可迭代對象:iterable 可以轉換 迭代器(如何?:都像內部定義一個 __iter__()方法)

  迭代器(iterator)遵循迭代器協議

2, 迭代器

1,只含有__iter__方法的資料是課迭代的對象

l = [1,2,3,4]print(‘__iter__‘ in dir(l))

 

2,含有__iter__方法,並且含有__next__方法的資料是迭代器。

print(dir([1,2].__iter__()))

 

3, 迭代器的意義:

① 迭代器節省記憶體

② 迭代器有惰性機制

③ 迭代器不能反覆,一直向下執行。

4, for 迴圈機制

for 可以迴圈有: 字串,列表,元祖,字典,集合,說明它們都是可以被迭代的。

在for迴圈中,就是在內部調用了__next__方法才能取到一個一個的值。

那接下來我們就用迭代器的next方法來寫一個不依賴for的遍曆。

l = [1,2,3,4]l_iter = l.__iter__()item = l_iter.__next__()print(item)item = l_iter.__next__()print(item)item = l_iter.__next__()print(item)item = l_iter.__next__()print(item)item = l_iter.__next__()print(item)

這是一段會報錯的代碼,如果我們一直取next取到迭代器裡已經沒有元素了,就會拋出一個異常StopIteration,告訴我們,列表中已經沒有有效元素了。

 

這個時候,我們就要使用異常處理機制來把這個異常處理掉

l = [1,2,3,4]l_iter = l.__iter__()while True:    try:        item = l_iter.__next__()        print(item)    except StopIteration:        break

那現在我們就使用while迴圈實現了原本for迴圈做的事情,我們是從誰那兒擷取一個一個的值呀?是不是就是l_iter?好了,這個l_iter就是一個迭代器。

1,內部含有__iter__方法,他會將可迭代對象先轉化成迭代器,然後在調用__next__方法。

2,它有異常處理方法 

range 它是可迭代對象,不是迭代器

驗證range 是不是迭代器

print(‘__next__‘ in dir(range(12)))  #查看‘__next__‘是不是在range()方法執行之後內部是否有__next__print(‘__iter__‘ in dir(range(12)))  #查看‘__next__‘是不是在range()方法執行之後內部是否有__next__
from collections import Iterablefrom collections import Iterator
print(isinstance(range(100000000),Iterable))print(isinstance(range(100000000),Iterator)) #驗證range執行之後得到的結果不是一個迭代器
產生器:1, 產生器的本質就是迭代器,迭代器,產生器是python自己用python代碼寫的迭代器

2,產生器的特點:①可以用產生器函數寫

          ②可以用各種推導式構建迭代器

          ③可以通過資料轉化

3,return 和 yield 的區別

 ①  return 返回給調用者值,並結束此函數

 ②  yiled  返回給調用者值,並將指標停留在當前位置

 4, send :

1,給上一個 yiled 整體發送一個值

2, send 不能給最後一個 yiled 發送值

3, 擷取第一個值的時候,不能用 send 只能用 next

 

---恢複內容結束---

python之路——函數迭代,產生器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.