首页 > 编程语言 >Python 之 lambda 函数

Python 之 lambda 函数

时间:2023-02-28 16:36:19浏览次数:40  
标签:function 函数 Python reduce 列表 sorted lambda

一、lambda 语法

lambda 函数的语法只包含一个语句,表现形式如下:
lambda [arg1 [,arg2,.....argn]]:expression

二、lambda 特性

lambda 函数是匿名的;lambda 函数有输入和输出;lambda 函数拥有自己的命名空间。
常见的lambda函数示例:

lambda x, y: x*y			# 函数输入是x和y,输出是它们的积x*y
lambda:None					# 函数没有输入参数,输出是None
lambda *args: sum(args)		# 输入是任意个数参数,输出是它们的和(隐性要求输入参数必须能进行算术运算)
lambda **kwargs: 1			# 输入是任意键值对参数,输出是1

三、lambda 常见用法

1、将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数。
add = lambda x, y: x+y
相当于定义了加法函数lambda x, y: x+y,并将其赋值给变量add,这样变量add就指向了具有加法功能的函数。
这时我们如果执行add(1, 2),其输出结果就为 3。

2、将lambda函数赋值给其他函数,从而将其他函数用该lambda函数替换。

# 为了把标准库time中的函数sleep的功能屏蔽(Mock),我们可以在程序初始化时调用:
time.sleep=lambda x: None
# 这样,在后续代码中调用time库的sleep函数将不会执行原有的功能。
# 例如:
time.sleep(3)	# 程序不会休眠 3 秒钟,而是因为lambda输出为None,所以这里结果是什么都不做

3、将lambda函数作为参数传递给其他函数。

四、lambda 用法之高阶函数

map() 函数:
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
语法:
map(function, iterable, ...)

# 1、计算平方数
def square(x):
	return x ** 2
map(square, [1,2,3,4,5])	# 计算列表各个元素的平方
# 结果:
[1, 4, 9, 16, 25]
# 2、计算平方数,lambda 写法
map(lambda x: x ** 2, [1, 2, 3, 4, 5])
# 结果:
[1, 4, 9, 16, 25]	 
# 3、提供两个列表,将其相同索引位置的列表元素进行相加
map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
# 结果:
[3, 7, 11, 15, 19]

reduce() 函数:
reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。语法:
reduce(function, iterable[, initializer])

# 1、两数相加
def add(x, y):            
	return x + y
reduce(add, [1, 3, 5, 7, 9])    # 计算列表元素和:1+3+5+7+9
# 结果:
25
# ===========匿名函数写法:===========
# 2、两数相加,lambda 写法
reduce(lambda x, y: x + y, [1, 2, 3, 4, 5])
# 结果:
15
# 3、把序列 [1, 3, 5, 7, 9] 变换成整数 13579:
from functools import reduce
def fn(x, y):
	return x * 10 + y
reduce(fn, [1, 3, 5, 7, 9])
# 结果:
13579

sorted() 函数:
sorted() 函数对所有可迭代的对象进行排序操作。

sort 与 sorted 区别:
sort 是 list 的一个方法,而 sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

语法:
sorted(iterable[, cmp[, key[, reverse]]])

# 1、简单排序
a = [5,7,6,3,4,1,2]
b = sorted(a)       # 使用sorted,保留原列表,不改变列表a的值
print(a)
[5, 7, 6, 3, 4, 1, 2]
print(b)
[1, 2, 3, 4, 5, 6, 7]
# ===========匿名函数用法:===========
L=[('b',2),('a',1),('c',3),('d',4)]
# 2、利用参数 cmp 排序
sorted(L, cmp=lambda x,y:cmp(x[1],y[1]))
# 结果:
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
# 3、利用参数 key 排序
sorted(L, key=lambda x:x[1])
# 结果:
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
# 4、按年龄升序
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=lambda s: s[2])
# 结果:
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
# 5、按年龄降序
sorted(students, key=lambda s: s[2], reverse=True)
# 结果:
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

filter() 函数:
描述:
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
语法:
filter(function, iterable)

# 1、过滤出列表中的所有奇数
def is_odd(n):
	return n % 2 == 1		 
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(list(newlist))
# 结果: [1, 3, 5, 7, 9]
# ===========匿名函数用法:===========
# 2、将列表[1, 2, 3]中能够被3整除的元素过滤出来
newlist = filter(lambda x: x % 3 == 0, [1, 2, 3])
print(list(newlist))
# 结果: [3]

标签:function,函数,Python,reduce,列表,sorted,lambda
From: https://www.cnblogs.com/conpi/p/17164776.html

相关文章

  • 汇编语言学习_4_函数
    第四节函数翻译自:https://asmtutor.com/介绍函数(子程序)函数/子程序(functions/subroutines)是可重用的代码片段,程序可以调用它们来执行各种可重复的任务。函数是使......
  • 记一次 python+allure 的学习
    1、allure下载地址:https://github.com/allure-framework/allure2/releases 下载完成后,配置window的环境变量,到bin目录 配置完成后,cmd命令窗口输入以下命令,检......
  • CCZ——python压缩纹理成ccz
    python压缩纹理资源===>cczimportosimportstructimportzlibdefccz(inputFile,outputFile,width,height):ifnotos.path.exists(inputFile):......
  • python显示屏幕点的坐标和颜色
    #encoding=utf-8importpyautoguifromPILimportImageGrabprint("将光标移到左上角0,0坐标点停止运行程序")whileTrue:#获取当前光标位置x,y=pyaut......
  • global与nonlocal关键字、函数名的多种用法、函数的嵌套调用、函数的嵌套定义、闭包函
    目录一、global与nonlocal关键字二、函数名的多种用法三、函数的嵌套调用四、函数的嵌套定义五、闭包函数六、装饰器简介一、global与nonlocal关键字global方法:用于局部......
  • PLSQL ROW_NUMBER() OVER()函数的使用
    语法格式:row_number()over(partitionby分组列orderby排序列desc)row_number()over()分组排序功能:在使用row_number()over()函数时候,over()里头的分组以及排序......
  • python socket 开发
    socket服务端开发#socket服务端开发importsocket#创建socket对象socket_server=socket.socket()#绑定ip地址和端口socket_server.bind(("localhost",888......
  • 损失函数之 L1 loss, IOU loss, GIOU loss, DIOU loss, CIOU loss
    目标检测任务的损失函数一般由分类损失函数和回归损失函数两部分构成回归损失函数的发展过程主要包括:最原始的SmoothL1Loss函数、2016年提出的IoULoss、2019年提出的GI......
  • slice()函数与splice()函数
    JavaScript高级程序设计P1511.slice()函数slice()函数用于重新创建一个包含原有数组中一个或多个元素的新数组,(将原数组赋值一份进行修改操作,使用slice()函数不会对原......
  • python+playwright 学习-17.模拟手机浏览器测试
    前言使用Playwright,您可以在任何浏览器上测试您的应用程序,也可以模拟真实设备,例如手机或平板电脑。设置手机模式只需配置您想要模拟的设备,Playwright就会模拟浏览器行......