1. 程式人生 > >python知識點

python知識點

技術 -s 如何工作 對象 是你 長度 通過 nbsp 分享

一.可叠代 ---與-----序列

可叠代是任何你可以用python中的for循環遍歷的東西。可叠代意味這可以遍歷,任何可以遍歷的東西都是可叠代的。

序列是一種非常常見的可叠代類型,列表,元組和字符串都是序列。

序列是可叠代的,他又一些特定的特征集。他們可以從0開始索引,以小於序列的長度結束,他們有一個長度並且他們可以被切分。列表,元組,字符串和其他所有的序列都是這樣工作的。

Python中很多東西都是可叠代的,但不是所有的可叠代的東西都是序列集合,字典,文件和生成器都是可叠代的,但是他們都不是序列。

序列可以使用下標的索引去遍歷,但這種方式只適用與序列。

二。叠代器驅動for循環

python的for循環使用叠代器

叠代器就是可以驅動可叠代對象的東西。你可以從任何可叠代對象中獲得叠代器,你也可以使用叠代器來手動對它的叠代進行遍歷。

我們可以使用 Python 的內置 iter 函數來訪問這些叠代器,將一個叠代器傳遞給 iter 函數總會給我們返回一個叠代器,無論我們正在使用哪種類型的叠代器。

 
轉至http://python.jobbole.com/89181/    精華在文末

1 >>> numbers = {1, 2, 3, 5, 7}
2 >>> coordinates = (4, 5, 7)
3 >>> words = "hello there
"
1 >>> iter(numbers)
2 <set_iterator object at 0x7f2b9271c860>
3 >>> iter(coordinates)
4 <tuple_iterator object at 0x7f2b9271ce80>
5 >>> iter(words)
6 <str_iterator object at 0x7f2b9271c860>

從一個可叠代對象中獲得一個叠代器,使用iter函數

一旦我們有了叠代器,我們可以做的事情就是通過將它傳遞給內置的 next

函數來獲取它的下一項。

叠代器是有狀態的,這意味著一旦你從它們中消耗了一項,它就消失了。

三。生成器是叠代器
生成器是叠代器,這意為這你可以在生成器上調用next來獲得他們的下一項

生成器也是可以叠代的,

Python 中的每一個叠代器都是可叠代的,意味著你可以循環遍歷叠代器。

因為叠代器也是可叠代的,所以你可以使用內置 next 函數從可叠代對象中獲得叠代器

請記住,當我們在可叠代對象上調用 iter 時,它會給我們返回一個叠代器。

當我們在叠代器上調用 iter 時,它會給我們返回它自己叠代器是可叠代的,所有的叠代器都是它們自己的叠代器。

讓我們回顧一些這些措辭。

  • 一個可叠代對象是你可以叠代的東西
  • 一個叠代對象器是一種實際上遍歷可叠代對象的代理

此外,在 Python 中叠代器也是可叠代的,它們充當它們自己的叠代器。

所以叠代器是可叠代的,但是它們沒有一些可叠代對象擁有的各種特性。

你可以把叠代器看作是惰性叠代器,它們是一次性使用,這意味著它們只能循環遍歷一次

技術分享圖片

全部的叠代器協議

讓我們從 Python 的角度來定義叠代器是如何工作的。

可叠代對象可以被傳遞給 iter 函數,以便為它們獲得叠代器。

叠代器:

  • 可以傳遞給 next 函數,它將給出下一項,如果沒有下一項,那麽它將會引發 StopIteration 異常
  • 可以傳遞給 iter 函數,它會返回一個自身的叠代器

這些語句反過來也是正確的:

  • 任何可以在不引發 TypeError 異常的情況下傳遞給 iter 的東西都是可叠代的
  • 任何可以在不引發 TypeError 異常的情況下傳遞給 next 的東西都是一個叠代器
  • 當傳遞給 iter 時,任何返回自身的東西都是一個叠代器

這就是 Python 中的叠代器協議。

一下內容未能完全明白

叠代器如何改進你的代碼

技術分享圖片

四。部分的消耗叠代器

python知識點