zoukankan      html  css  js  c++  java
  • python的lambda表达式

    lambda表达式:匿名函数,它与显式函数def不一样,实质上可以当做一个表达式。

    它是为处理简单的函数而出现的,其参数可选,返回对象,可以被def嵌套使用

    1. 作为表达式

    # 1. 作为表达式
    add_func = lambda x,y : x+y  # x,y相当于传参,x+y属于函数体,返回的值就是x+y的结果
    aa = add_func(1,2)
    print(aa)  #输出为3
    bb = add_func('who are ','you?')
    print(bb)  #输出:who are you?

    2. 作为函数的嵌套部分

    # 2. 函数嵌套得到表达式
    def get_line(a,b):
        return lambda x : a*x+b
    y = get_line(1,1)  #此时y是一个函数 y=ax+b
    print(y(3))    # 输出为4

    3. 不带参数的函数

    ss = lambda:'where are you come from?'
    print(ss())   #不带参数调用,输出为:where are you come from?

    4. 用于选择函数

    list_func = [lambda x:x+10, lambda y:y+100, lambda z:z+1000]  #其中的每个元素都是一个小函数,可以随时调用
    ff_result = []
    for ff in list_func:
        ff_result.append(ff(1000))
    print(ff_result)   #输出:[1010, 1100, 2000]

    5. lambda表达式作为参数:max函数与lambda表达式操作字典

    aa = {'s1':34,'s2':50}
    
    kk = lambda x: aa[x]   # 因为此时相当于定义了一个kk(x)函数,且x的取值范围是aa的键,其他的x会报错
    
    max_item = max(aa, key=kk)   # 当然这里的key=kk中,kk也可以用其他函数代替,都是对前面的参数aa进行操作,aa传入的是键
    print(max_item)   
    # max此时表示,先代入aa计算kk(x)的值,然后比较,得到函数值最大的aa的键,其实也就是kk(x)中的x
    # 所以可以用这个函数,加上max来实现求取经过函数后的最大值所对应的自变量x,类似argmax的功能

    为什么?个人觉得:函数式编程中,字典作为可迭代参数传入的是键,而不是键值对

    aa = {'s1':34,'s2':50}
    
    mm = lambda x: x
    s = map(mm, aa)
    print(list(s))

    for ii in aa:
        print(ii)   #字典作为可迭代容器时

    6. lambda表达式:max函数与lambda表达式操作列表

    bb = ['s','open','what']
    ff = lambda y: bb[y]   # 一定要注意 lambda传入的参数是什么
    max_elem = max(range(len(bb)), key=ff)  #求取列表bb中最大值对应的索引
    print(max_elem)

    7. lambda表达式可用其他函数代替

    # 当然,lambda表达式可以用函数来代替
    def get_value(z):
        return bb[z]   #全局作用域
    
    max_elem_2 = max(range(len(bb)), key=get_value)  #求取列表bb中最大值对应的索引
    print(max_elem_2)

    特点:

    # 1. 简洁
    # 2. 在不复杂的函数中,lambda能提高性能
    # 3. lambda拥有自己的命名空间,除了自己的参数之外,不能访问其他参数

    # 更pythonic的用法在 map、reduce、filter、sorted等函数式编程的函数中,因为它们都支持函数作为参数

    参考:

    https://blog.csdn.net/qq_39226755/article/details/86773171

    https://www.cnblogs.com/hf8051/p/8085424.html

  • 相关阅读:
    php 无限极分类
    高德地图随笔
    安全随笔
    关于专线映射问题
    js小技巧总结
    php+ajax 文件上传
    去除数组中重复的元素
    关于ueditor插入不了动态地图
    vue.js 安装
    js轮播
  • 原文地址:https://www.cnblogs.com/qi-yuan-008/p/12075151.html
Copyright © 2011-2022 走看看