• Python 中的重点来了 : 迭代器 生成器


    可迭代的对象:带有__iter__方法的,就是迭代器。字符串,列表,元祖,字典,集合,文件,都是可迭代的

    可迭代的对象使用了__iter__方法的,就是迭代器,带有__next__,__iter__方法。

    l = [1,2,3,4,6]   # l被称为可迭代的对象
    l1 = l.__iter__()  # l1为迭代器
    l1.__iter__()     # 迭代器的两种方法
    l1.__next__

    Python 中的for循环 就是用了迭代器的原理

    生成器:

    1.生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行

    2.生成器表达式:类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表

    生成器实例:

    def func():
        a = 1
        b = 3
        print('------')
        yield a 
        print('******')
        yield b 
        
    ret = func() # ret就是生成器 ,实质上就是迭代器
    print(next(ret))
    print(next(ret))

     **执行第三次他会报错

    生成器的优点:如果读取大量的内容,那么用迭代器可以减少内存,惰性计算

    生成器的应用send语句 加上装饰器 贼牛逼,计算每日平均利率

    def wrapper(func):
        def inner(*args,**kwargs):
            ret = func(*args,**kwargs)
            next(ret)
            return ret
        return inner
    
    @wrapper
    def pjs():
        total = 0
        day = 0
        ave = None
        while True:
            day_num = yield ave
            total +=day_num
            day += 1
            ave = total / day
    
    ave = pjs()
    # next(ave)
    print(ave.send(10))
    print(ave.send(15))

    yield from 语句

    正常的情况下的生成器

    list =[1,2,3,4,5,6,7,8,9]
    def func():
        for i in  list:
            yield i
    ret = func()
    print(next(ret))
    print(next(ret))
    print(next(ret))
    print(next(ret))

    yield from语句的生成器

    def func():
        yield from list
    
    
    ret = func()
    print(next(ret))
    print(next(ret))

    效果与上面产生的生成器是一样 的

    列表推导式 与 生成器表达式

    #alex 准备下十个蛋来报答egon
    for i in range(1,11):
        print('alex下的第%s个蛋!!!! 真厉害呀' % i)
    
    # 用列表推导式来表达:
    l = [i for i in range(1,11)]
    print(l)

    生成器的表达是就是把列表推导式的中括号,变成小括号

    #alex 准备下十个蛋来报答egon
    for i in range(1,11):
        print('alex下的第%s个蛋!!!! 真厉害呀' % i)
    
    # 用列表推导式来表达:
    l = (i for i in range(1,11))
    print(next(l))
    print(next(l))
    print(next(l))
    print(next(l))

    完美

    最新免费视频: http://www.pythonav.com/all/10000.html
  • 相关阅读:
    经典算法排序——希尔排序
    查找算法总结
    Anddroid HttpService
    经典排序算法——直接选择排序
    [置顶] 获取Android手机上音乐播放器状态
    经典排序算法——归并排序
    Android锁屏未读短信,未接电话
    经典排序算法——冒泡排序
    经典排序算法——快速排序
    linux下同时存在当静态库和动态库同名
  • 原文地址:https://www.cnblogs.com/niehaidong111/p/7274415.html
Copyright © 2020-2023  润新知