当前位置:   article > 正文

Python 可迭代对象(Iterable)、迭代器(Iterator)与生成器(generator)之间的相互关系

Python 可迭代对象(Iterable)、迭代器(Iterator)与生成器(generator)之间的相互关系

1、迭代

通过重复执行的代码处理相似的数据集的过程,并且本次迭代的处理数据要依赖上一次的结果继续往下做,上一次产生的结果为下一次产生结果的初始状态,如果中途有任何停顿,都不能算是迭代。

# 非迭代例子
n = 0
while n < 3:
    print('hello world')
    n += 1
  • 1
  • 2
  • 3
  • 4
  • 5
hello world
hello world
hello world
  • 1
  • 2
  • 3
# 迭代例子
n = 0
while n < 3:
    print('第%s次 hello world'%(n+1))
    n += 1
  • 1
  • 2
  • 3
  • 4
  • 5
第1次 hello world
第2次 hello world
第3次 hello world
  • 1
  • 2
  • 3

前者循环内3次输出" Hello world",输出的数据不依赖上一次的数据,因此不是跌代。而后者的循环内打印的3次数据都上一次循环的影响,所以是迭代。

2、容器 container

容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用 in, not in关键字判断元素是否包含在容器中。

  • 从字面上理解,容器基本上可以包含其他类型对象(如列表、元组、字典等)作为元素的对象;在 Python 常见的数据类型中几乎所有的数据类型(字符串除外)都能包含其它类型的对象;

  • 容器仅仅只是用来存放数据的,我们平常看到的 l = [1,2,3,4] 等等,表面上我们可以直接从列表容器中取出元素,但事实上容器并不提供这种能力,而是可迭代对象赋予了容器这种能力。

3、可迭代对象(Iterable)

3.1 基本概念

可迭代对象并不是指某种具体的数据类型,它是指存储了元素的一个容器对象,且容器中的元素可以通过__iter__( )方法或__getitem__( )方法访问。

  • Python实现一个通用的外部可以访问可迭代对象内部数据的接口:

    • __iter__()方法的作用是让对象可以用 for ... in 循环遍历
    • __getitem__( )方法是让对象可以通过“实例名[index/key]”的方式访问实例中的元素
  • 一个可迭代对象是不能独立进行迭代的,Python中,迭代是通过 for ... in 来完成的。凡是可迭代对象都可以直接用 for...in 循环访问,这个语句其实做了两件事:第一件事是调用 __iter__() 获得一个可迭代器,第二件事是循环调用__next__()

3.2 判断一个对象是不是可迭代对象

可以使用 isinstance() 判断一个对象是否是 Iterable 对象

from collections import Iterable

class MyDataType1:
    # 自定义的数据类型1
    def __iter__(self):
        pass
    
class MyDataType2:
    # 自定义的数据类型2
    pass
    
# 自定义的数据类型实例化
mydatatype1 = MyDataType1()
mydatatype2 = MyDataType2()

data_info = {
   "字典":{
   },  "列表":[],  "字符串":'abc',
             "元祖":(1,),"集合":{
   1,},"MyDataType1": mydatatype1, "MyDataType2": mydatatype2, 
             "数字":100,"boolen"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/145505
推荐阅读
相关标签
  

闽ICP备14008679号