zoukankan      html  css  js  c++  java
  • Python生成器, 列表解析与字典解析

    什么是生成器

      可以理解为数据类型,自动实现了 迭代器协议(其他的数据类型需要调用自己内置的__iter__方法,所以生成器是可迭代对象

    生成器分类及在python中的表现:

      1.生成器函数:常规函数定义,   使用yield语句 而不是return语句 返回结果, yield语句一次返回一个结果

    def test():
            yield 1
            yield 2
        # 取代了return的位置  不会终止程序
    g = test()
    print(g)
    print(g.__next__)
    print(g.__next__)

     

      2. 生成器表达式: 类似于 列表推到, 但是生成器 返回按需产生的结果

      

    #三元表达式
    name = 'lyg'
    res = 'SB' if name =='lyg' else 'noob'
    print(res)
    #列表解析
    
    egg_list = []
    for i in range(10):
            egg_list.append('鸡蛋%s' %i)
    print(egg_list)

    l = ['鸡蛋%s' %i for i in range(10)]
    # l = [i for i in range(10 if i>5] #没有四元 没有else
    print(l)
    # 与列表解析
    l = ('鸡蛋%s' %i for i in range(10))  # 生成器外部用括号表示  而不是 []
    # l 生成器表达式形式
    print(l)
    print(next(l))  # Next 本质就是调用__next__
    print(l.__next__())

    总结:

      1: 列表解析的 [] 换成()就是 声称其表达式

      2: 列表解析与 生成器表达式都是 遍历编程方式,只不过 生成器表达式更节省内存

      3: Python不但使用迭代器协议,让for循环变得更加通用。大部分内置函数也使用迭代器协议访问对象

    sum(x ** 2 for x in range(4))
    # 而不是
    sum ([x ** 2 for x in range(4)])

    生成器总结   

    • 语法与函数类似
    • 状态挂起不用等待列表全部生成 ,生产一个就可以yield一个
    • 自动返回迭代器协议

     yield两个特点:
      

    • 相当于 return做返回值 
    • 保留函数的运行状态
    纵有疾风起,人生不言弃!
  • 相关阅读:
    poj 2728 Desert King(最小比率生成树,迭代法)
    HDU
    hud 2089 不要62 (数位dp)
    食物链(带全并查集)
    docNet基础学完感想
    zoj 1081 (改进的弧长算法)(转)
    zoj 1962 How Many Fibs?(字符串化为数字处理)
    zoj 1109 zoj 1109 Language of FatMouse(字典树)
    iOS开发网络数据之AFNetworking使用
    iOS 使用AFNetworking
  • 原文地址:https://www.cnblogs.com/poetl/p/8316038.html
Copyright © 2011-2022 走看看