首页 > 其他分享 >lambda 函数

lambda 函数

时间:2023-10-10 10:37:54浏览次数:36  
标签:函数 reduce li print sorted lambda

 

概念介绍:

匿名函数:是指一类无需定义标识符(函数名)的函数或子程序

 

关键字lambda表示匿名函数,冒号前面的n表示函数参数,可以有多个参数。

匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。

用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数:

有些函数在代码中只用一次,而且函数体比较简单,使用匿名函数可以减少代码量,看起来比较"优雅“

相比函数,lamba 表达式具有以下 2 个优势:

  对于单行函数,使用 lambda 表达式可以省去定义函数的过程,让代码更加简洁,防止函数名冲突;
  对于不需要多次复用的函数,使用 lambda 表达式可以在用完之后立即释放,提高程序执行的性能。

案例:

def calc(x,y):
    return x**y

#换成匿名函数
calc = lambda x,y:x**y
print(calc(2,5))

def calc(x,y):
    if x > y:
        return x*y
    else:
        return x / y
    
#三元运算换成匿名函数
calc = lambda x,y:x * y if x > y else x / y
print(calc(2,5))

 

lambda函数使用场景:

1. 和map()函数一起使用

map(函数名,可迭代对象)函数接收两个参数,一个是函数,一个是可迭代对象,map将传入的函数依次作用到序列的每个元素,并把结果作为新的可迭代对象返回

 

## 求列表[1,2,3,4,5,6,7,8,9],返回一个n*n 的列表

#一般解决方案
li = [1,2,3,4,5,6,7,8,9]
for ind,val in enumerate(li):
    li[ind] = val * val
print(li)
# [1, 4, 9, 16, 25, 36, 49, 64, 81]

# 高级解决方案
li = [1,2,3,4,5,6,7,8,9]
print(list(map(lambda x:x*x,li)))
# [1, 4, 9, 16, 25, 36, 49, 64, 81]

 

2. 与 reduce函数一起使用

reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

reduce(func,[1,2,3]) 等同于 func(func(1,2),3),返回值为单个值

对于序列内所有元素进行累计操作

 

#接受一个list并利用reduce()求积
from functools import reduce
li = [1,2,3,4,5,6,7,8,9]
print(reduce(lambda x,y:x * y,li))
# 结果=1*2*3*4*5*6*7*8*9 = 362880

a = [12, 34, 56]

print reduce(lambda x , y: x + y, a)  # 102

print reduce(lambda x , y: x - y, a) # -78

3. 和filter函数一起使用

filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

对于序列中的元素进行筛选,最终获取符合条件的序列

 

 

# 在一个list中,删掉偶数,只保留奇数
li = [1, 2, 4, 5, 6, 9, 10, 15]
print(list(filter(lambda x:x % 2==1,li)))  # [1, 5, 9, 15]

# 回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数
li = list(range(1, 200))
print(list(filter(lambda x:int(str(x))==int(str(x)[::-1]),li)))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191]

 

4.和sorted函数一起使用

sorted(iterable, /, *, key=None, reverse=False)

接收一个key函数来实现对可迭代对象进行自定义的排序

可迭代对象:主要与列表,字符串,元祖,集合和字典

key:接受一个函数,根据此函数返回的结果,进行排序

reverse:排序方向,默认为从小到大,reverse=True为逆向

 

# 对列表按照绝对值进行排序
li= [-21, -12, 5, 9, 36]
print(sorted(li, key = lambda x:abs(x)))
# [5, 9, -12, -21, 36]

"""
sorted()函数按照keys进行排序,并按照对应关系返回list相应的元素:

keys排序结果 => [5, 9,  12,  21, 36]
                |  |    |    |   |
最终结果     => [5, 9, -12, -21, 36]
"""

# 把下面单词以首字母排序
li = ['bad', 'about', 'Zoo', 'Credit']
print(sorted(li, key = lambda x : x[0]))
# 输出['Credit', 'Zoo', 'about', 'bad']
"""
对字符串排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果,大写字母Z会排在小写字母a的前面。
"""

# 假设我们用一组tuple表示学生名字和成绩:

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
# 请用sorted()对上述列表分别按名字排序
print(sorted(L, key = lambda x : x[0]))
# 输出[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]

# 再按成绩从高到低排序
print(sorted(L, key = lambda x : x[1], reverse=True))
# 输出[('Adam', 92), ('Lisa', 88), ('Bob', 75), ('Bart', 66)]

 

5. 与三元运算结合

#if 条件为真的时候返回if前面内容,否则返回0 
exp1= lambda x:x+1 if  2==1 else 0 
print(exp1(2))
exp2 = lambda x:x+1 if  1==1 else 0 
print(exp2(2))

输出:
0
3

#if not 为假返回if not前面内容,否则返回0  
exp3 = lambda x:x+1 if not 2==1 else 0  
print(exp3(2))  
  
exp4 = lambda x:x+1 if not 1==1 else 0  
print(exp4(2))

输出:
3
0

 


————————————————
版权声明:本文为CSDN博主「岳来」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yuelai_217/article/details/123790192

 

标签:函数,reduce,li,print,sorted,lambda
From: https://www.cnblogs.com/xujunhui/p/17753967.html

相关文章

  • map()函数
    1.函数作用:map()函数是python的一个内置函数,它的功能是:将指定的函数,依次作用于可迭代对象的每个元素,并返回一个迭代器对象。这个迭代器可以是一个,也可以是多个 2.map()的语法:map(function,iterable,...)参数:function-我们指定的函数(或数据类型),可以是python内......
  • 泛型算法(find、count、sort、fill、unique、copy、lambda、迭代器)
    一、概述algorithm中,还有一些数值泛型算法定义在头文件numeric中。算法永远不会执行容器的操作)。1、find和count:#include<iostream>#include<algorithm>#include<numeric>#include<vector>#include<list>usingnamespacestd;usingv_int=vector<int>;usingv_s......
  • 【C++ Primer】函数
       函数是一个命名了的代码块,通过调用函数执行相应的代码,函数可重载。 一、函数基础实参初始化形参。return有两项工作:1、返回值(如果有的话);2、将控制权从被调函数转移回主调函数。 intfact(intval){intret=1;returnret>val?ret:val;}intmain(){......
  • 迷失岛第4章 函数里面带int参数与按钮的结合 与一些其他东西的运用
      这个代码 里面带参数 与按钮结合可以触发一些内容 比如按下这个按键进行计算啥的 也算是一个新方法  ContainsKey就是查找里面有没有 移除指定元素 定义GameObject在Scene中是否处于活动状态 ......
  • Python turtle.circle()函数
    turtle.circle()函数   定义:turtle.circle(radius,extent=None)   作用:根据半径radius绘制extent角度的弧形   参数:             radius:弧形半径                            当radius值为正数时,圆心在当前位置/小海龟左......
  • Day16 函数对象--函数嵌套调用--闭包函数
    1.Day15_复习1: 2.Day15_复习2: 3.Day15_复习3: 4.函数对象_可以赋值_可以当做函数参数传给另外一个函数: 5.函数对象_可以当做函数另外一个函数的返回值_可以当做容器类型的一个元素: 6.函数对象初步实现ATM流程: 7.函数对象应用案例优化: 8.函数的嵌套调用: 9.......
  • Oracle和达梦:相似度函数:UTL
    Oracle和达梦的:相似度函数:UTL函数:UTL_MATCH.edit_distance_similarityUTL_MATCH.edit_distance_similarity是Oracle数据库中的一个函数,用于计算两个字符串之间的相似度。它基于编辑距离算法,该算法用于衡量两个字符串之间的相似程度。编辑距离是通过计算将一个字符串转换为......
  • Clickhouse时间日期函数一文详解+代码展示
    转:https://blog.csdn.net/master_hunter/article/details/125762575一、时间函数和MySQL时间函数有些不同,但是时间函数的功能是一样的,这里把常用的时间函数给出,效果以实际代码运行结果为准: 1.取当前时间SELECT now()AStimeSELECT today()AStime获取当前时间戳SELECT ......
  • Go函数全景:从基础到高阶的深度探索
    在本篇文章中,我们深入探索了Go语言中的函数特性。从基础的函数定义到特殊函数类型,再到高阶函数的使用和函数调用的优化,每一个部分都揭示了Go的设计哲学和其对编程效率的追求。通过详细的代码示例和专业解析,读者不仅可以掌握函数的核心概念,还能了解如何在实践中有效利用这些特性来......
  • 【转】内核的时间函数
    因为需要在kernelteedriver中做个获取时间的测试,才有了这次搜索。这篇比较符合需求:https://www.dingmos.com/index.php/archives/38/,感谢这位博主!问题分析中看到的一些点:auth_token_table.h中获取时间:explicitAuthTokenTable(size_tmax_entries=32,time_t(*clock......