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 中的迭代器协议。

一下内容未能完全明白

迭代器如何改进你的代码

四。部分的消耗迭代器

原文地址:https://www.cnblogs.com/qingsheng/p/9191492.html