美文网首页python
python 迭代器协议和for循环工作机制

python 迭代器协议和for循环工作机制

作者: little_short | 来源:发表于2018-05-15 15:58 被阅读0次
迭代器协议和for循环工作机制

1、迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,已终止迭代(只能往后走不能往前退)
2、可迭代对象,实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法)
3、协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max,函数等)使用迭代器访问对象

l = [1, 2, 3]

for i in l:
    print(i)

for循环机制
for循环本质,循环所有对象,全都是使用迭代器协议。

(字符串,列表,元祖,字典,集合)这些都不是可迭代对象,只不过for循环试,调用了他们内部的__iter__方法,把他们变成了可迭代对象,然后他们变成了可迭代对象
然后for循环调用可迭代的对象的__next__方法去取值,而且for循环会捕捉StopIteration异常,以终止迭代

x = 'hello'

print(dir(x))

iter_text = x.__iter__()
print(iter_text.__next__())
print(iter_text.__next__())
print(iter_text.__next__())
print(iter_text.__next__())
print(iter_text.__next__())
print(iter_text.__next__())

转换成可迭代对象

xl = x.__iter__()

print(xl.__next__())

x = 'hello'
index = 0



while index< len(x):
    print(x[index])
    index+=1

有序的可以按照序列访问  while,无序的无法办到
for 循环可以循环任何

dic = {'a': 1, 'b': 2}

dic_l = dic.__iter__()
print(dic_l.__next__())

迭代器补充

存储于内存
l = ['dd','ee','ss']

这种方式 只得到地址
itr = l.__iter__()

print(itr.__next__())
print(itr.__next__())
print(itr.__next__())
print(itr.__next__())

next 方法就是调用 iter 的next方法
print(next(itr))

相关文章

  • python 迭代器协议和for循环工作机制

  • 详解python迭代循环和用户输入

    FOR(iteration) 循环 for 循环是 Python 中最常用的迭代机制。Python 中几乎所有的结...

  • Python-学习之路-16 协程

    协程 迭代器 可迭代(iterable):可直接作用for循环的变量 迭代器(iterator):不经可以作用域f...

  • Python day17_协程

    协程的引入 要讲协程 先要知道什么是迭代对象 迭代器 以及生成器 迭代对象 迭代: 使用for循环遍历取值的过程就...

  • 高级特性

    切片 迭代 列表生成式 生成器 在Python中,一边循环一边计算的机制,称为生成器。 迭代器 凡是可作用于for...

  • Python 迭代 Iteration

    for x in iter(iterable)迭代器 (Iterator): Python 中 for 循环实际操...

  • 九 for循环

    一、功能 for 循环提供了python中最强大的循环结构(for循环是一种迭代循环机制,而while循环是条件循...

  • for

    深层次原因: python 中的for循环实质上是一个迭代器,迭代器在一个独立的线程中工作,并且拥有mutex(互...

  • Python基础-16生成器-迭代器

    16.生成器-迭代器     可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象,在Python中提供...

  • 3. Python 迭代器与生成器

    生成器与迭代器 迭代 迭代(Iteration)是一种遍历可迭代类型的方式 Python中通过for循环完成迭代 ...

网友评论

    本文标题:python 迭代器协议和for循环工作机制

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