zoukankan      html  css  js  c++  java
  • Python—函数(迭代器、生成器)

    迭代器iterator

    • 可迭代协议—只要含有__iter__方法的,都是可迭代的iterable
    • 迭代器协议—内部含有__next__方法和__iter__方法的就是迭代器
    1. 只要能被for循环的数据类型,就一定拥有__iter__方法,for循环其实就是在使用迭代器
    2. 只要是迭代器就一定可以迭代
    3. 可迭代对象.__iter__() == 迭代器
    4. 迭代器中的__next__()方法可以一个一个的获取值

    迭代器对象可以使用常规for语句进行遍历:

    list=[1,2,3,4]
    it = iter(list)    # 创建迭代器对象
    for x in it:
        print (x, end=" ")

    执行以上程序,输出结果如下:

    1 2 3 4

    迭代器的好处

    • 从容器类型中一个一个的取值,会把所有的值都取到
    • 节省内存空间

    生成器

    生成器函数本质上就是我们自己写的函数

    跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

    在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回yield的值。并在下一次执行 next()方法时从当前位置继续运行。

    yield关键字

    yield关键字和return用法相同,只要含有yield关键字的函数,都是生成器函数,yield需要写在函数内部,不可以和return同时使用,生成器函数执行后会得到一个生成器作为返回值

    def generator():
        print(1)
        yield 'a'
    #生成器函数 : 执行之后会得到一个生成器作为返回值
    ret = generator()
    print(ret)
    print(ret.__next__())
    #娃哈哈%i
    def wahaha():
        for i in range(2000000):
            yield '娃哈哈%s'%i
    
    count = 0
    for i in g:
        count +=1
        print(i)
        if count > 50:
            break
    
    for i in g:
        count +=1
        print(i)
        if count > 100:
            break
  • 相关阅读:
    docker将jar打包镜像文件
    特性阻抗(转)
    关于三极管偏置电路的思考
    怎样理解阻抗匹配?(转)
    你要包火到几时呢
    Bluetooth Note
    今年过年没回家
    第二天(tomcat与web程序结构与Http协议与HttpUrlConnection)
    JavaIO操作(1)转换流
    canphp框架功能与特性介绍
  • 原文地址:https://www.cnblogs.com/NeroCl/p/8178811.html
Copyright © 2011-2022 走看看