• Python之浅谈生成器


    三元表达式

    a=0
    b=6
    print (a)if a>b else print(b)
    

    三元表达式只能写if的双分支结构

    列表推导式

    print(list(i for i in range(10)))#这种写法只有list和set才有用
    

    字典生成式

    print({k:v**3 for k,v in zip([a,b,c,d],[1,2,3,4])})#不能写这种代码,可读性太差
    

    生成器

    在Python中创建迭代器最方便的技术是使用生成器。生成器的语法类似于函数,但不返回值。为了显示序列中的每一个元素,会使用yield语句。

    def range(start=0,end=None,long=1):#通过生成器来实现range内置方法
        if  end==None:
            start,end=0,start
        while start<end:
            yield start
            start+=long
    for i  in range(6,10):
        print(i)
    

    注意:我们使用关键字yield而不是return来表示结果。这表明在Python中,我们正在定义一个生成器而不是一个传统的函数。在同一函数中,将yield和return语句结合起来是非法的,除非是使生成器结束执行的return语句。

    生成器表达式

    print(tuple(i for i in range(1000000)))
    

    生成器表达式与列表推导式的区别就是生成器表达式输出的是元组,列表推导式输出的是列表,而元组可以减少占用空间。

    匿名函数

    匿名函数就是没有名字的函数,匿名需要关键字lambda

    匿名函数一般不单独使用,和 filter()/map()/sorted()/列表的sort()内置方法联用

     salary_dict = {
        'tim': 3000,
        'jason': 100000,
        'tank': 5000,
        'sean': 2000
    }
    
    salary_list = list(salary_dict.items())
     print(max(salary_list,key=lambda i:i[1]))#求最大值
     print(min(salary_list,key=lambda i:i[1]))#求最小值
    
     print(list(filter(lambda i: i[1] < 5000, salary_list)))  #筛选出工资小于5000的人
     print(list(map(lambda i: i[1] + 2000, salary_list)))#每个人的工资加2000
    
  • 相关阅读:
    rails学习笔记(6)
    流程图好工具推荐JUDE
    流程图好工具推荐JUDE
    rails学习笔记(5)
    [转载 js]JsDoc Toolkit:Javascript文档利器
    ruby学习笔记(7)
    end_form_tag 已经在rails2.x中去掉了
    [转载 js]JsDoc Toolkit:Javascript文档利器
    rails学习笔记(5)
    ios 防止按钮快速点击造成多次响应的避免方法。
  • 原文地址:https://www.cnblogs.com/MrYang161/p/11352706.html
Copyright © 2020-2023  润新知