国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python疑問6:生成器,可迭代對象,迭代器區別和聯系

happyfish / 3211人閱讀

摘要:一個自定義的迭代器如下可迭代對象像等可以直接作用于循環的對象,稱為可迭代對象。可迭代對象實現了方法用于返回迭代器。

生成器,可迭代對象,迭代器之間究竟是什么關系?
用一幅圖來概括:

1.生成器
定義生成器
方式一:

//區別于列表生成式 gen = [x*x for x in range(5)]
gen = (x*x for x in range(5)) 
print(gen)  //Out: at 0x00000258DC5CD8E0>

方式二:

def fib():
    prev, curr = 0, 1
    while True:
        yield curr
        prev, curr = curr, curr + prev
f = fib()
print(f) //Out:

定義成功后,我們可以利用next()訪問生成器下一個元素

print(next(gen)) //0
print(next(gen)) //1
...
print(next(gen)) //16
print(next(gen)) //StopIteration

但一般用for循環遍歷

for n in gen:
    print(n) //0  1  4   9  16

2.迭代器
任何實現了__iter__和__next__()方法的對象都是迭代器。__iter__返回迭代器自身,__next__返回容器中的下一個值。所以生成器是特殊的迭代器,她內部具有這兩種方法。
一個自定義的迭代器如下:

class Fib:
    def __init__(self):
        self.prev = 0
        self.curr = 1
 
    def __iter__(self):
        return self
 
    def __next__(self):
        value = self.curr
        self.curr += self.prev
        self.prev = value
        return value
f = Fib() 
count = 1 
for n in f:
    print(n)
    count = count+1
    if count>=10:
        break
//Out:1 1 2 3 5 8 13 21 34

3.可迭代對象
像list,tuple,set,dict,str等可以直接作用于for循環的對象,稱為可迭代對象。可迭代對象實現了__iter__方法,用于返回迭代器。

demo = [1,2,3,4]
print(isinstance(demo, Iterable)) //True
iter_object = iter(demo)
print(iter_object) //

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/41347.html

相關文章

  • Python 進階之路 (九) 再立Flag, 社區最全的itertools深度解析(上)

    摘要:例如,以下對兩個的相應元素求和這個例子很好的解釋了如何構建中所謂的迭代器代數的函數的含義。為簡單起見,假設輸入的長度可被整除。接受兩個參數一個可迭代的正整數最終會在中個元素的所有組合的元組上產生一個迭代器。 前言 大家好,今天想和大家分享一下我的itertools學習體驗及心得,itertools是一個Python的自帶庫,內含多種非常實用的方法,我簡單學習了一下,發現可以大大提升工作...

    tuantuan 評論0 收藏0
  • Python中的迭代對象迭代生成

    摘要:本文重點掌握可迭代的對象的定義掌握可迭代對象迭代器與生成器之間的關系和異同熟悉標準庫中生成器。二迭代器迭代器介紹迭代器用于從集合中取出元素的對象。若想再次迭代須重建迭代器。迭代器檢查方式調用,。區別可迭代的對象不是迭代器。 導語:本文章記錄了本人在學習Python基礎之控制流程篇的重點知識及個人心得,打算入門Python的朋友們可以來一起學習并交流。 本文重點: 1、掌握可迭代的對象的...

    starsfun 評論0 收藏0
  • 為什么range不是迭代?range到底是什么類型?

    摘要:為什么不更規范點,令生成的是迭代器呢關于這個問題,我沒找到官方解釋,以下純屬個人觀點。類型是什么以上是我對為什么不產生迭代器的一種解答。小結回顧全文,我得到了兩個偏冷門的結論是可迭代對象而不是迭代器對象是不可變的等差序列。 showImg(https://segmentfault.com/img/bVbmKjd?w=6000&h=4000); 迭代器是 23 種設計模式中最常用的一種(...

    187J3X1 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<