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

1、迭代

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

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

前者循环内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
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值