python知識點
一.可叠代 ---與-----序列
可叠代是任何你可以用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知識點