Python 程序设计入门(014)—— Python 的 Lambda 函数(匿名函数)

Python 程序设计入门(014)—— Python 的 Lambda 函数(匿名函数)

一、匿名函数的定义

Lambda 函数是函数式编程中的核心概念之一。Python 提供了一种简单的方法来定义 lambda 函数。匿名函数可以在不定义函数的情况下通过一行代码实现高效的函数功能。匿名函数可以在表达式中直接使用,非常方便。匿名函数的语法格式如下:

lambda [arguments] : expression

说明:

(1)arguments:形参列表,多个形参用逗号隔开,也可以不带参数。

形参列表的形式如下:

a, b
a=1, b=2
*args
**kwargs
a, b=1, *args

(2)expression:函数返回值的表达式,表达式只能有一个。

表达式的形式如下:

6
a + b
sum(b)
6 if a >10 else 7

(3)lambda 返回值是一个函数的地址,也就是函数对象。

例如:

fadd = lambda x,y:x+y
print(fadd)
print(fadd(3,2))

运行结果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
<function <lambda> at 0x00000266BFC99EE0>
5

二、匿名函数的特征

(1)Lambda 函数是匿名的

所谓匿名函数,通俗地说就是没有名字的函数。

(2)Lambda 函数有输入和输出

输入是传入到参数列表 [arguments] 的值,输出是根据表达式 expression 计算得到的值。

(3)Lambda 函数拥有自己的命名空间

不能访问自己参数列表之外或全局命名空间里的参数,只能完成非常简单的功能。

常见的 Lambda函数示例:

lambda x, y: x+y			# 函数的输入为x和y,输出是它们的和:x+y
lambda *args: sum(args)		 # 输入是任意个数参数,输出是它们的和
lambda **kwargs: 6			# 输入是任意键值对参数,输出是6

三、匿名函数的常见用法

1、命名后调用

如果我们只需要一个简单的函数,lambda 是一个很好的选择,可以被看作是定义函数的一种更简单的方法。我们可以给它一个名称,并像普通函数一样使用它。调用的形式如下:

fun_name = lambda arguments : expression
fun_name(arguments)

例如:

fun_perimeter = lambda r:3.14 * r * 2
fun_area = lambda r:3.14 * r ** 2
print("圆的周长:",fun_perimeter(5))
print("圆的面积:",fun_area(5))

运行结果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
圆的周长: 31.400000000000002
圆的面积: 78.5

2、直接调用

直接调用 lambda 函数的语法格式如下:

(lambda arguments : expression)(arguments)

例如:

print("圆的周长:",(lambda r:3.14 * r * 2)(5))
print("圆的面积:",(lambda r:3.14 * r ** 2)(5))

运行结果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
圆的周长: 31.400000000000002
圆的面积: 78.5

3、将 Lambda 函数作为参数传递给其他函数(一般赋予 key 参数)

(1)max() 函数

max() 函数返回给定参数的最大值,参数可以为序列。max() 函数的语法格式如下:

max( x, y, z, .... )

说明:返回给定参数的最大值

例如:由 Lambda 函数决定是按元组的哪一个值排序。

num = [(100, 2.5), (150, 0.2), (80, 3.4), (120, 1.8)]
y = max(num, key=lambda x: x[0])   # 按元组的第1个值排序取最大值
print(y)
y = max(num, key=lambda x: x[1])   # 按元组的第2个值排序取最大值
print(y)

运行结果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
(150, 0.2)
(80, 3.4)

(2)sorted() 函数

sorted() 函数对所有可迭代的对象进行排序操作。sorted() 函数的语法格式如下:

sorted(iterable, key=None, reverse=False)
参数说明:
(1)iterable:可迭代对象。
(2)key:指定用来进行比较的元素,指定可迭代对象中的一个元素进行排序。
(3)reverse:排序规则,reverse = True 降序, reverse = False 升序(默认)。
(4)返回值:返回重新排序的列表。

sort 与 sorted 区别:

(1)sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

(2)list 的 sort 方法是对已经存在的列表进行操作。而 sorted 函数返回的是一个新的 list,而不是在原来的基础上进行的操作。

例1:对列表的操作

num = [2,3,22,102,-87,11,-23]
print(sorted(num))  # 升序排列
print(sorted(num,key=lambda x :abs(x)))  # 按绝对值升序排列,参数x接收的是列表的元素
stu = ["Jerry","Mark","tom","Black","zhangping","Liugang","WANGLIN"]
print(sorted(stu))   # 对名字排序(区分大小写)
print(sorted(stu,key=str.lower))   # 对名字排序(转换为小写后排序,即:不区分大小写)
print(sorted(stu,key=lambda x:x.lower()))   # 作用同上
print(sorted(stu,key=lambda x:len(x)))      # 按字符串的长度排序
# 参数x接收的是列表的元素,参数x接收的是列表的元素,参数x接收的是列表的元素
lang = [(11,"java"),(101,"go"),(201,"c"),(17,"vb"),(21,"c++")]
print(sorted(lang,key=lambda x:x[0]))  # 按列表中的元组的第一列排序
print(sorted(lang,key=lambda x:x[1]))  # 按列表中的元组的第二列排序

运行结果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
[-87, -23, 2, 3, 11, 22, 102]
[2, 3, 11, 22, -23, -87, 102]
['Black', 'Jerry', 'Liugang', 'Mark', 'WANGLIN', 'tom', 'zhangping']
['Black', 'Jerry', 'Liugang', 'Mark', 'tom', 'WANGLIN', 'zhangping']
['Black', 'Jerry', 'Liugang', 'Mark', 'tom', 'WANGLIN', 'zhangping']
['tom', 'Mark', 'Jerry', 'Black', 'Liugang', 'WANGLIN', 'zhangping']
[(11, 'java'), (17, 'vb'), (21, 'c++'), (101, 'go'), (201, 'c')]
[(201, 'c'), (21, 'c++'), (101, 'go'), (11, 'java'), (17, 'vb')]

例2:对字典的操作

lang = {
    
    11:"java",101:"go",201:"c",17:"vb",21:"c++"}
print(lang)
print(sorted(lang.items(),key=lambda x:x[0]))  # 按字典的 key 排序
print(sorted(lang.items(),key=lambda x:x[1]))  # 按字典的 value 排序

运行结果如下:
===================== RESTART: C:\Python\Python38\First.py =====================
{
    
    11: 'java', 101: 'go', 201: 'c', 17: 'vb', 21: 'c++'}
[(11, 'java'), (17, 'vb'), (21, 'c++'), (101, 'go'), (201, 'c')]
[(201, 'c'), (21, 'c++'), (101, 'go'), (11, 'java'), (17, 'vb')]

猜你喜欢

转载自blog.csdn.net/weixin_44377973/article/details/132174099
今日推荐