zoukankan      html  css  js  c++  java
  • 匿名函数

    一、匿名函数


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

    lambda x, y: x+y
    <function __main__.<lambda>(x, y)>
    res = (lambda x, y: x+y)(1, 2)
    print(res)
    3

    二、与内置函数联用


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

    54匿名函数-薪资.jpg?x-oss-process=style/watermark

    salary_dict = {
        'nick': 3000,
        'jason': 100000,
        'tank': 5000,
        'sean': 2000
    }

    1.如果我们想从上述字典中取出薪资最高的人,我们可以使用max()方法,但是max()默认比较的是字典的key。

    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)}")
    # 'nick', v1 = func('nick')
    # 'jason', v2 = func('jason')
    # 'tank', v3 = func('tank')
    # 'sean', v4 = func('sean')
    
    
    print(
        f"max(salary_dict, key=lambda name: salary_dict[name]): {max(salary_dict, key=lambda name: salary_dict[name])}")
    max(salary_dict): tank
    max(salary_dict, key=func()): jason
    max(salary_dict, key=lambda name: salary_dict[name]): jason

    2.如果我们想对上述字典中的人,按照薪资从大到小排序,可以使用sorted()方法。

    sorted()工作原理:

    1. 首先将可迭代对象变成迭代器对象
    2. res=next(迭代器对象),将res当做参数传给第一个参数指定的函数,然后将该函数的返回值当做判断依据。
    lis = [1, 3, 2, 5, 8, 6]
    sorted(lis)
    print(f"lis: {lis}")
    print(f"sorted(lis,reverse=True): {sorted(lis,reverse=True)}")
    lis: [1, 3, 2, 5, 8, 6]
    sorted(lis,reverse=True): [8, 6, 5, 3, 2, 1]
    salary_dict = {
        'nick': 3000,
        'jason': 100000,
        'tank': 5000,
        'sean': 2000
    }
    
    print(
        f"sorted(salary_dict, key=lambda name: salary_dict[name]): {sorted(salary_dict, key=lambda name: salary_dict[name])}")
    sorted(salary_dict, key=lambda name: salary_dict[name]): ['sean', 'nick', 'tank', 'jason']

    3.如果我们想对一个列表中的某个人名做处理,可以使用map()方法。

    map()工作原理:

    1. 首先将可迭代对象变成迭代器对象
    2. res=next(迭代器对象),将res当做参数传给第一个参数指定的函数,然后将该函数的返回值作为map()方法的结果之一。

    54匿名函数-傻逼.jpg?x-oss-process=style/watermark

    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']

    4.如果我们想筛选除名字中含有'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(f"list(filter_res): {list(filter_res)}")
    list(filter_res): ['jason sb', 'tank sb', 'sean sb']
     
  • 相关阅读:
    LOJ6284. 数列分块入门 8 题解
    LOJ6283. 数列分块入门 7 题解
    LOJ6281. 数列分块入门 5 题解
    LOJ6280. 数列分块入门 4 题解
    LOJ6279. 数列分块入门 3 题解
    LOJ6278. 数列分块入门 2 题解
    LOJ6277. 数列分块入门 1 题解
    洛谷P3402 可持久化并查集 题解
    P3919 【模板】可持久化线段树 1(可持久化数组)题解 主席树模板题
    计算机图形学:凹凸贴图、法线贴图、切线空间、TBN矩阵
  • 原文地址:https://www.cnblogs.com/lulingjie/p/11412934.html
Copyright © 2011-2022 走看看