python 可迭代对象

可迭代对象

可迭代协议

我们现在是从结果分析原因,能被for循环的就是“可迭代的”,但是如果正着想,for怎么知道谁是可迭代的呢?

假如我们自己写了一个数据类型,希望这个数据类型里的东西也可以使用for被一个一个的取出来,那我们就必须满足for的要求。这个要求就叫做“协议”。

可以被迭代要满足的要求就叫做可迭代协议。可迭代协议的定义非常简单,就是内部实现了iter方法。

如果这个对象中有_ iter _()方法,这个对象就是可迭代对象

if ‘iter’ in dir(str)
1
通俗易懂 :可以被for循环迭代的对象就是可迭代对象。
isinstance()判断一个对象是否是Iterable对象:

from collections import Iterable
# 判断对象是否可迭代
data=(1,2,3,4,5,6)
print(isinstance(data,Iterable))  # 返回为True则为可迭代
# isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。
data1=[1,2,3,4,5,6]
print(isinstance(data1,Iterable))
data2='1,2,3,4,5,6'
print(isinstance(data2,Iterable))

迭代器

迭代器是什么

迭代器只不过是一个实现迭代器协议的容器对象。它基于两个方法:

next 返回容器的下一个项目
_ iter _ 返回迭代器本身

from collections import Iterable
# 判断对象是否可迭代
data=(1,2,3,4,5,6)
print(isinstance(data,Iterable))  # 返回为True则为可迭代
# isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。
data1=[1,2,3,4,5,6]
print(isinstance(data1,Iterable))
data2='1,2,3,4,5,6'
print(isinstance(data2,Iterable))


data_iter=iter(data)
while True:
    try:
        i=next(data_iter)
        print(i)
    except StopIteration as e:
        print('迭代完成')
        break
    #else:
        #print(i)

for i in data:
    print(i)
    # for 实现迭代的过程

class Mylist(object):
    '''只进行追加操作'''
    def __init__(self):
        self.iter=[]
    def add(self,par):
        self.iter.append(par)
    def __iter__(self):
        '''表示对象可迭代'''
        myiter=MyIter(self.iter)
        return myiter

class MyIter(object):
    '''实现迭代器'''
    '''一个实现了iter和next方法的对象叫做迭代器'''
    def __init__(self,mylist):
        self.mylist=mylist
        self.current_index=0
    def __next__(self):
        if self.current_index<len(self.mylist):
            self.current_index += 1
            return self.mylist[self.current_index-1]
        else:
            raise StopIteration
            # raise 主动抛出错误
            # 停止迭代
    def __iter__(self):
        return self
mylist=Mylist()
for i in range(10):
    mylist.add(i)
for i in mylist:
    print(i)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值