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'>
  • 相关阅读:
    netstat
    ansibe tower的开源替代品semaphore
    ansible playbook 示例
    centos6 安装python2.7
    python celery + redis
    flask + uwsgi 生产环境
    ubuntu访问supermicro ikvm
    [leetcode]Symmetric Tree
    [leetcode]Pascal's Triangle
    [leetcode]Letter Combinations of a Phone Number
  • 原文地址:https://www.cnblogs.com/zxc-Weblog/p/8179123.html
Copyright © 2011-2022 走看看