美文网首页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循环工作机制

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