python函數(迭代器,產生器)

來源:互聯網
上載者:User

標籤:本質   python   列表   ret   通過   遇到   pytho   return   不能   

迭代器

索引:1 = [1,2,3]

for迴圈:for i in l:

      i

 

print(dir([]))告訴列表擁有的所有方法

只要是能被for迴圈的資料類型 就一定擁有__iter__方法
print([].__iter__())
一個列表執行了__iter__()之後的傳回值就是一個迭代器

print(dir([]))print(dir([].__iter__()))print(set(dir([].__iter__())) - set(dir([])))

 

Iterable 可迭代的 -- > __iter__ #只要含有__iter__方法的都是可迭代的
[].__iter__() 迭代器 -- > __next__ #通過next就可以從迭代器中一個一個的取值

只要含有__iter__方法的都是可迭代的 —— 可迭代協議

 

迭代器的概念
迭代器協議 —— 內部含有__next__和__iter__方法的就是迭代器

迭代器協議和可迭代協議:
  可以被for迴圈的都是可迭代的
  可迭代的內部都有__iter__方法
  只要是迭代器 一定可迭代
  可迭代的.__iter__()方法就可以得到一個迭代器
  迭代器中的__next__()方法可以一個一個的擷取值

for迴圈其實就是在使用迭代器
iterator
可迭代對象
直接給你記憶體位址

print([].__iter__())print(range(10))

 



for
只有 是可迭代對象的時候 才能用for
當我們遇到一個新的變數,不確定能不能for迴圈的時候,就判斷它是否可迭代

for i in l:    passiterator = l.__iter__()iterator.__next__()

 


迭代器的好處:
  從容器類型中一個一個的取值,會把所有的值都取到。
  節省記憶體空間
  迭代器並不會在記憶體中再佔用一大塊記憶體,
  而是隨著迴圈 每次產生一個
  每次next每次給我一個

產生器

產生器 —— 迭代器

def generator():    print(1)    return ‘a‘ret = generator()print(ret)

 


產生器函數 —— 本質上就是我們自己寫得函數
產生器運算式

l = [1,2,3,4,5]for i in l:    print(i)    if i == 2:        breakfor i in l:    print(i)

 

只要含有yield關鍵字的函數都是產生器函數
yield不能和return共用且需要寫在函數內

def generator():print(1)yield ‘a‘

 


#產生器函數 : 執行之後會得到一個產生器作為傳回值

ret = generator()print(ret)print(ret.__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.