• python匿名函数


    78匿名函数

    一、有名函数

    我们之前定义的函数都是有名函数,它是基于函数名使用的。

    def func():
        print('from func')
    func()
    func()
    func()
    print(func)
    #输出:
    from func
    from func
    from func
    <function func at 0x0000026B60E47048>
    

    二、匿名函数

    匿名函数。他没有绑定名字,使用一次即被收回,加括号即可以运行。

    print(lambda x,y:x+y)
    #输出:
    <function <lambda> at 0x0000027D6A837048>
    
    
    res = (lambda x,y:x+y)(1,2)
    print(res)
    #输出:
    3
    
    

    三、与内置函数联用

    匿名函数通常与max(),sorted(),filter(),sorted()方法联用。

    1. 如果我们想从上述字典中取出最薪资最高的人,我们可以使用max()方法,但是max()默认比较的是字典的ley。
      1. 首先将可迭代对象变成迭代器对象。
      2. res=next(迭代器对象),将res当做参数传给key指定的函数,然后该函数的返回值当作判断依据。
    salary_dict = {
        'nick': 3000,
        'jason': 100000,
        'tank': 5000,
        'sean': 2000
    }
    
    print(f"max(salary_dict): {max(salary_dict)}")
    
    
    def func(k):
        return salary_dict[k]
    
    
    print(f"max(salary_dict, key=func()): {max(salary_dict, key=func)}")
    
    
    print(max(salary_dict, key=lambda name: salary_dict[name]))
    #输出:
    max(salary_dict): tank
    max(salary_dict, key=func()): jason
    jason
    
    1. 如果我们想对上述字典中的人,按照薪资从大到小排序,可以使用sorted()方法。

      sorted()工作原理:

      1. 首先将可迭代对象变成迭代器对象
      2. res=next(迭代器对象),将res当做参数传给第一个参数指定的函数,然后将该函数的返回值当作判断依据。
    lis = [1,3,2,5,8,6]
    sorted(lis)
    print(lis)
    print(sorted(lis,reverse=True))
    
    #输出:
    [1, 3, 2, 5, 8, 6]
    [8, 6, 5, 3, 2, 1]
    
    
    salary_dict = {
        'nick': 3000,
        'jason': 100000,
        'tank': 5000,
        'sean': 2000
    }
    
    print(sorted(salary_dict, key=lambda name: salary_dict[name]))
    #输出:
    ['sean', 'nick', 'tank', 'jason']
    
    
    1. 如果我们想对一个列表中的某一个人民做处理,可以使用map()方法。

      map()工作原理。

      1. 首先将可迭代对象变成迭代器
      2. res=next(迭代器对象),将res当做参数传给第一个参数指定的函数,然后将该函数的返回值作为map()方法的结果之一。
    name_list = ['jason','tank','sean']
    res = map(lambda name:f"{name} sb",name_list)
    print(f"list(res):{list(res)}")
    
    #输出:
    list(res):['jason sb', 'tank sb', 'sean sb']
    
    
    1. 如果我们想要筛选除名字中含有‘sb'的名字,我们可以使用filter()方法。

      filter()工作原理:

      1. 首先可将迭代对象变成迭代器对象
      2. res=next(迭代器对象),将res当阐述传给第一个参数指定的函数,然后filter()会判断函数的返回值的真假,如果为真则留下。
    name_list=['nick','jason sb','tank sb','sean sb']
    filter_res = filter(lambda name:name.endswith('sb'),name_list)
    print(list(filter_res))
    #输出:
    ['jason sb', 'tank sb', 'sean sb']
    
    
  • 相关阅读:
    C#域名解析
    【转】正则基础之——贪婪与非贪婪模式
    【转】正则基础之——神奇的转义
    总结:实例化SqlParameter时,如果是字符型,一定要指定size属性,还有制定具体的类型
    从数据库里随机读取几条数据
    Html异步下载分析
    C#生成验证码程序
    【转】正则应用之——逆序环视探索
    如何用class在Dictionary里面作为Key使用
    【转】SqlDataReader 提前终止的性能问题
  • 原文地址:https://www.cnblogs.com/SkyOceanchen/p/11354372.html
Copyright © 2020-2023  润新知