zoukankan      html  css  js  c++  java
  • Python推导式和匿名函数

    三元表达式

    三元表达式:

    x=10
    y=20
    print(x if x>y else y)
    

    列表推导式

    列表推导式又名列表解析式

    通过简明扼要的方式来创建列表,也可以使用if语句来控制创建列表

    lt=[x for x in range(1,5)]
    lt=[1,2,3,4]
    

    通过if创建列表

    lt=[x*y for x in range(1,5) if x>2 for y in range(1,4) if y<3]
    print(lt)
    相当于:
    for x in range(1,5)
        if x > 2
            for y in range(1,4)
                if y < 3
                    x*y
    

    字典生成式

    可以通过字典生成器的方式快速生成字典

    #通过zip函数压缩生成
    lt=['a','b','c','d']
    lt2=[1,2,3,4]
    z=zip(lt,lt2)
    dic={x:j for x,j in z}
    print(dic)
    
    #或者直接通过生成式生成
    dic={chr(x):x for x in range(97,101)}
    
    字典生成式使用if...else
    dic={chr(x):x*2 if x%2==1 else x for x in range(97,101) }
    print(dic)
    

    生成器

    yield:

    在函数中但凡出现yield关键字,再调用函数,就不会继续执行函数体代码,而是会返回一个值。

    def yi():
        x=1
        while x<100:
            x += 1
            yield x
    
    
    f=yi()
    for i in f:
        print(i)
    

    匿名函数

    python 使用 lambda 来创建匿名函数。

    所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

    • lambda 只是一个表达式,函数体比 def 简单很多。
    • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
    • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
    • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

    语法

    lambda [arg1 [,arg2,.....argn]]:expression
    

    匿名函数没有名字,使用一次就收回

    c = lambda x,y,z: x*y*z
    a=c(2,3,4)
    print(a)
    

    与内置函数的联动

    匿名函数一般与max()、sorted()、filter()、map()方法联动

    与max()联动

    salary_dict = {
        'nick': 3000,
        'jason': 100000,
        'tank': 5000,
        'sean': 2000
    }
    a=max(salary_dict, key=lambda name:salary_dict[name])
    print(a)
    

    与min()联动

    salary_dict = {
        'nick': 3000,
        'jason': 100000,
        'tank': 5000,
        'sean': 2000
    }
    a=min(salary_dict, key=lambda name:salary_dict[name])
    print(a)
    

    与sorted()联动

    llt={'a':'2','b':'1','c':'3','d':'9','g':'5'}
    ll=list(llt.items())
    print(ll)
    ll.sort(key= lambda i: i[1])
    print(ll)
    ll=sorted(ll ,key=lambda i:i[0])
    print(ll)
    

    filter()工作原理:

    用于筛选

    1. 首先将可迭代对象变成迭代器对象
    2. res=next(迭代器对象),将res当做参数传给第一个参数指定的函数,然后filter会判断函数的返回值的真假,如果为真则留下。

    map()

    1. 首先将可迭代对象变成迭代器对象
    2. res=next(迭代器对象),将res当做参数传给第一个参数指定的函数,然后将该函数的返回值作为map()方法的结果之一。
  • 相关阅读:
    localhost 和 127.0.0.1 认识
    postgreSQL可视化工具pgAdmin3 导入表结构和数据
    posgreSQL安装失败解决方案
    C#面向对象基本概念总结
    关于数据存储(关系型数据库和非关系型数据库)
    ADO.NET中的五大内置对象
    关于XML
    WPF中TreeView控件SelectedItemChanged方法的MVVM绑定
    WPF中使用MVVM进行multibinding
    WPF中TreeView控件数据绑定和后台动态添加数据(二)
  • 原文地址:https://www.cnblogs.com/ledgua/p/11348627.html
Copyright © 2011-2022 走看看