Python12--迭代器

作者: 伊洛的小屋 | 来源:发表于2020-09-01 15:08 被阅读0次
1.迭代器

要理解迭代器,首先需要明白迭代器和可迭代对象的区别。一个一个读取、操作对象称为迭代,Python 中,可迭代(Iterable)对象就是你能用for循环迭代它的元素,比如列表是可迭代的

  • 大多数容器对象都可以使用 for 语句,承接上文装饰器的例子,还是拿英雄的技能举例子
  • 王者荣耀中英雄关羽的技能有一骑当千 单刀赴会 青龙偃月 刀锋铁骑for语句分别迭代出1-4技能
(yiluo) ➜  Code python3
Python 3.7.5 (default, Nov 29 2019, 14:32:46)
[Clang 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> skills = ['一骑当千','单刀赴会','青龙偃月','刀锋铁骑']
>>> for skill in skills:
...     print(skill)
...
一骑当千
单刀赴会
青龙偃月
刀锋铁骑
  • 在幕后,for 语句会调用容器对象中的 iter()。 该函数返回一个定义了 __next__() 方法的迭代器对象,该方法将逐一访问容器中的元素
  • 我们现在利用一下 iter()函数 和 next()函数

你能用 next 函数不断的去获取它的下一个值,直到迭代器返回 StopIteration异常。所有的可迭代对象都可以通过 iter 函数去获取它的迭代器

# 作者:伊洛Yiluo 公众号:伊洛的小屋
# 个人主页:https://yiluotalk.com/
# 博客园:https://www.cnblogs.com/yiluotalk/
>>> skills = ['一骑当千','单刀赴会','青龙偃月','刀锋铁骑']
>>> skill = iter(skills)
>>> print(skill)
<list_iterator object at 0x1037ea5d0>
>>> next(skill)
'一骑当千'
>>> next(skill)
'单刀赴会'
>>> next(skill)
'青龙偃月'
>>> next(skill)
'刀锋铁骑'
>>> next(skill)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
  • skill就是迭代器
  • next迭代到没有值的时候就会报错
  • 所有的迭代器其实都实现了__iter____next__ 这俩个魔法方法,iternext 函数实际上调用的是这两个魔法方法,上面的例子背后其实是这样的
2.另一种实现方式
  • 迭代器的另一种实现方式,__iter__ + __next__:
>>> class Test:
...     def __init__(self, a, b):
...         self.a = a
...         self.b = b
...     def __iter__(self):
...         return self
...     def __next__(self):
...         self.a += 1
...         if self.a > self.b:
...             raise StopIteration()
...         return self.a
...
>>> test = Test(0, 5)
>>> next(test)
1
>>> next(test)
2
>>> next(test)
3
>>> next(test)
4
>>> next(test)
5
>>> next(test)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 10, in __next__
StopIteration
  • 能被 for 循环访问的都是可迭代对象,能被 next 函数获取下一个值的是迭代器

欢迎下方【戳一下】【点赞】
Author:伊洛Yiluo
愿你享受每一天,Just Enjoy !

相关文章

  • Python12--迭代器

    1.迭代器 要理解迭代器,首先需要明白迭代器和可迭代对象的区别。一个一个读取、操作对象称为迭代,Python 中,...

  • 迭代器

    本节实验我们将为大家讲解迭代器,主要介绍 5 种常见迭代器:输入、输出迭代器,前向逆向迭代器,双向迭代器和随机迭代...

  • 迭代器与生成器

    迭代(iteration)与可迭代(iterable) 迭代器 迭代器协议(iterator protocol) ...

  • 10.迭代器与生成器

    一、迭代器 1). 迭代器概述 类比Java中的迭代器,参考迭代器模式https://www.jianshu.co...

  • 9 ES6 迭代器、生成器

    1、Iterator迭代器 ->遵循迭代模式思想实现,分为内部迭代器、外部迭代器,聚焦点:添加迭代接口 (1).迭...

  • C++boolan part3_week4

    1. 迭代器 1.1 迭代器的种类 使用随机访问迭代器的容器:array, vector,deque使用双向迭代器...

  • 迭代器模式

    内部迭代器和外部迭代器 简单地讲,内部迭代器就是类似 forEach 的迭代器,其内部迭代逻辑已经制定好,只要传入...

  • vector erase的用法

    正向迭代器: 反向迭代器:

  • 10 python中的迭代器和生成器

    1 迭代器 遵循了迭代器协议的对象为迭代器,即内部调用iter()方法转化成的对象为成迭代器。 1.1 迭代器的特...

  • 第7章迭代器模式

    第7章迭代器模式 7.1 jQuery中的迭代器 7.2 实现自己的迭代器 7.3 内部迭代和外部迭代 1内部迭代...

网友评论

    本文标题:Python12--迭代器

    本文链接:https://www.haomeiwen.com/subject/rxnmsktx.html