zoukankan      html  css  js  c++  java
  • 迭代器

    TOC

    引用

    # x = 10
    # while True:
    #     print(x)
    
    #
    # list1 = [1, 2, 3, 4]  # 1, 2, 3, 4
    # n = 0
    # while n < len(list1):
    #     print(list1[n])
    #     n += 1

    一、迭代器

    迭代的工具。

    迭代:
    迭代指的是重复迭代,每一次迭代都是基于上一次的结果而来的。

    迭代器的定义

    迭代器指的是迭代取值的工具,它可以迭代取值。

    可迭代对象

    如果想要知道python中迭代器是什么?必须先知道什么是可迭代对象?

    • 可迭代对象: 所有的序列类型: str, list, tuple, dict, set, f
      凡是内部有str._iter_()方法的都是可迭代对象。
    str1 = 'hello tank!'
    str1.__iter__()
    list1 = [1, 2, 3]  # list([1, 2, 3])
    list1.__iter__()
    set.__iter__()
    dict.__iter__()
    tuple.__iter__()
    open('a.txt').__iter__()

    获取迭代器:

    通过可迭代对象._iter_(), 得到的返回值就是 “迭代器对象”。
    迭代器是迭代取值的工具,作用是迭代取值。

    str1 = '靓仔靓女'
    
    iter_str1 = str1.__iter__()
    print(iter_str1)  # iterator指的是迭代器对象   # iter_str1 ---> python13期都是靓仔,靓女!

    如何迭代取值:

    迭代器对象_next_() # “每一次执行”,都会从迭代器对象中取出一个值

    str1 = '靓仔靓女'
    
    iter_str1 = str1.__iter__()
    print(iter_str1)  # iterator指的是迭代器对象   # iter_str1 ---> python13期都是靓仔,靓女!# print(iter_str1.__next__())
    print(iter_str1.__next__())
    print(iter_str1.__next__())
    print(iter_str1.__next__())
    
    # 因为迭代器中的值已经取完了
    print(iter_str1.__next__())  # 报错,StopIteration

    如何捕获异常

    当我们的值取完之后会报错,需要使用捕获异常来解决

    # list1是一个可迭代对象
    ist1 = ['tank', 'jason鸡哥', 'sean', '饼哥']
    
    # 获取迭代器对象: iter_list1
    iter_list1 = list1.__iter__()
    
    while True:
         # 补充: try: 捕获异常
         try:
             print(iter_list1.__next__())  # 报错
    
         # 立即触发此处代码 StopIteration
        except StopIteration:
             break

    总结: 可迭代对象 VS 迭代器对象:

    • 获取可迭代对象: 定义序列类型(str, list, set, tuple, dict, f)
      • 特点:
        内置有_iter_()
    • 获取迭代器对象: 通过可迭代对象调用._iter_()得到返回值
      • 特点:
        内置有_next_()

    迭代器对象的优点:

    • 优点:
      1.不依赖于索引迭代取值。
      2.节省内存空间。
    • 缺点:
      1.取指定某个值麻烦
      2.每次取值都要从第一个值开始,无法通过索引取值。

    for循环原理

    语法:     for i in 可迭代对象:
    in: 可迭代对象 ----> 内部会自动调用.__iter__() ---> 迭代器对象
    for line in list1:
         # 迭代器对象.__next__()
    
    • 迭代器对象本质上是一个可迭代对象
    • 文件本质上既是迭代器对象,也是可迭代对象。
    • 可迭代对象不一定是迭代器对象
    set1 = '1, 2, 3, 4'
    
    # iter_set1: 迭代器对象
    iter_set1 = set1.__iter__()
    iter_set1.__next__()
    
    # 确定: 迭代器对象也是一个可迭代对象
    # 判断可迭代对象是否是迭代器对象
    # print(iter_set1.__iter__() is iter_set1)  # True
    
    # 唯独文件比较特殊: 因为文件从读取出来的时候就是一个迭代器对象
    # f ---> 可迭代对象, 还是迭代器对象
    # f = open('user.txt', 'r', encoding='utf-8')
    # # 确定: 文件既是可迭代对象,也是迭代器对象。
    # # iter_f ---> 迭代器对象
    # iter_f = f.__iter__()
    # print(iter_f is f)  # True
    
    
    # 可迭代对象
    list1 = [1, 2, 3, 4]
    
    # iter_list1 ---> 迭代器对象
    iter_list1 = list1.__iter__()
    print(iter_list1 is list1)  # False
    # 可迭代对象不一定是迭代器对象
  • 相关阅读:
    vue 小知识
    vue中alert toast confirm loading 公用
    vue 跳外链
    vue 中使用 Toast弹框
    vue 添加vux
    #034Python选修课第二届Turtle绘图大赛
    #033 信安培训基础题Python解决网络安全实验室|网络信息安全攻防学习平台
    #031 测试插入博客园插入视频
    # 030删除数组中的重复元素
    #029 博客换个主题从新开始
  • 原文地址:https://www.cnblogs.com/cnhyk/p/11890772.html
Copyright © 2011-2022 走看看