python 迭代器(iterator),迭代器协议,可迭代对象(iterable)

三个的含义

  1. 迭代器协议:对象(迭代器对象)必须提供一个next方法,执行该方法,要么返回迭代中的下一项,要么被引起一个Stoplteration的异常。以终止迭代(迭代只能往前走,不能往后退)。
  2. 迭代器对象:实现了迭代器协议,是可迭代对象执行iter方法后得到的
  3. 可迭代对象:对象内部有内置的iter方法。
    ps:迭代器对象一定是可迭代对象,可迭代对象不一定是迭代器对象。
    ps:一个迭代器只能遍历一遍,第二次遍历不会有返回值,因为已经迭代完了。
class Iter(object):
    def __init__(self, x):
        self.x = x

    def __iter__(self):
        return self
        # 只执行一次,返回一个迭代器对象

    def __next__(self):
        self.x += 1
        if self.x > 10:
            raise StopIteration
        return self.x
        # 多次执行,每次返回迭代的下一项


sample = Iter(1)
print(next(sample)) # 2
print(next(sample)) # 3
print(next(sample)) # 4
for i in sample:
    print(i, end=' ') # 5 6 7 8 9 10
for i in sample:
    print(i, end=' ') # 这里什么都没有

for循环

for循环的本质是先调用 iter() 函数将可迭代对象转化为一个迭代器对象,然后每次循环调用一次 next() 函数,得到迭代的下一项。

# 例如下
class Iter(object):
    def __init__(self, x):
        self.x = x

    def __iter__(self):
        return self
        # 必须返回迭代器对象

    def __next__(self):
        self.x += 1
        if self.x > 10:
            raise StopIteration
        return self.x
        # 返回迭代的下一项


sample = Iter(1)
for i in sample:
    print(i, end=' ')
print('')
sample_1 = Iter(1)
# for 循环的执行过程如下
iterable = iter(sample_1)
# 先利用 iter() 函数将可迭代对象转化为迭代器对象
n = 10
while n > 1:
    print(next(iterable), end=' ')
    # 然后不断的用 next() 函数调用迭代器对象,以返回下一个值
    n = n-1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值