zoukankan      html  css  js  c++  java
  • python基础十一之迭代器和生成器

      可迭代

      内置方法中含有__iter__的数据类型都是可迭代的,只要是可迭代的就可以使用for循环,反之亦然。

    print(dir(''))   # dir()函数可以获取当前数据类型的所有内置方法  返回值是list
    print('__iter__' in dir([]))  # 判断是否含有__iter__内置方法

      迭代器

      内置方法中含有__iter__和__next__的都是迭代器,所以迭代器一定是可迭代的

    # 一个可迭代的对象调用__iter__()之后会返回一个迭代器
    print(type([].__iter__()))   # <class 'list_iterator'>

      迭代器可以使用__next__()方法一个一个去获取值

    li = [1, 2, 3, 4, 5]
    iterator = li.__iter__()
    print(iterator.__next__())  # 1
    print(iterator.__next__())  # 2
    print(iterator.__next__())  # 3

      迭代器的好处:

        从容器内一一取值,可以取出全部内容

        节省内存空间:每次取值时才在内存中生成一个值

      迭代器和可迭代判断方法

    from collections import Iterator
    from collections import Iterable
    print(isinstance([], Iterator))  # Iterator 迭代器
    print(isinstance([], Iterable))  # Iterable 可迭代

      生成器

      生成器是含有yield关键字的迭代器。

    # 定义
    """
        def generator():
            函数体
            yield 返回值
    """

      调用生成器后返回的是一个生成器。

    def generator():
        print('生成器')
        yield 'zxc'
        return 'a'
    # 生成器中yield和return能同时存在,return在yield后面定义没有任何意义,
    # return在yield前面定义将无法执行yield,也就不在是生成器了
    ret = generator()
    print(type(ret))  # <class 'generator'>
  • 相关阅读:
    【常见问题汇总--持续更新】bootloader常见问题
    UCD9222 EN1/EN2
    cdce62005配置说明
    xilinx planahead partial reconfiguration
    诺基亚 920T
    不出现用户帐户控制-让Win7的用户账户控制(UAC)放过信任的程序
    python 拷贝文件夹下的文件 到 另一个文件夹
    python 计算两个日期间的小时数
    shell 解析 json
    shell 脚本运行 hive sql
  • 原文地址:https://www.cnblogs.com/zxc-Weblog/p/8179123.html
Copyright © 2011-2022 走看看