產生器與迭代器

來源:互聯網
上載者:User

標籤:bar   位置   name   tuples   ict   單點   容器   情況   就是   

容器(container)

容器是一種把多個元素組織在一起的資料結構,容器中的元素可以逐個地迭代擷取,可以用innot in關鍵字判斷元素是否包含在容器中。通常這類資料結構把所有的元素儲存在記憶體中(特殊情況除外,比如迭代器和產生器對象)在Python中,常見的容器物件有:

  • list, deque, ....
  • set, frozensets, ....
  • dict, defaultdict, OrderedDict, Counter, ....
  • tuple, namedtuple, …
  • str

容器比較容易理解,因為你就可以把它看作是一個盒子、一棟房子、一個柜子,裡面可以塞任何東西。從技術角度來說,當它可以用來詢問某個元素是否包含在其中時,那麼這個對象就可以認為是一個容器,比如 list,set,tuples都是容器物件:

1 1 in [1, 2, 3]      # lists2 4 not in [1, 2, 3]3 1 in {1, 2, 3}      # sets4 4 not in {1, 2, 3}5 1 in (1, 2, 3)      # tuples6 4 not in (1, 2, 3)

判斷元素的key是否存在

1 d = {1: ‘foo‘, 2: ‘bar‘, 3: ‘qux‘}2 print(‘foo‘ in d) #False3 print(1 in d)     #True

判斷一個字串是否在另一個字串中

1 s = ‘foobar‘2 print(‘ob‘ in s) #True

儘管絕大多數容器都提供了某種方式來擷取其中的每一個元素,但這並不是容器本身提供的能力,而是可迭代對象賦予了容器這種能力

可迭代對象(iterable)

很多容器都是可迭代對象,此外還有很多的對象同樣也是可迭代對象,比如處於開啟狀態的files

可以返回一個迭代器對象的都可稱之為可迭代對象

1 x = [1, 2, 3]2 y = iter(x)3 z = iter(x)4 next(y) #15 next(y) #26 next(z) #17 type(x) #<class ‘list‘>8 type(y) #<class ‘list_iterator‘>

 

這裡x是可迭代對象,y、z是兩個獨立的迭代器

 

迭代器

迭代器是一個帶狀態的對象,從第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。

 

產生器

在 Python 中,使用了 yield 的函數被稱為產生器(generator)。

只有在調用時才會產生相應資料

只記錄當前位置

只有一個next()方法

產生器是一個返回迭代器的函數,只能用於迭代操作,更簡單點理解產生器就是一個迭代器。

 

本文轉自:https://foofish.net/iterators-vs-generators.html

產生器與迭代器

聯繫我們

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