Python函数-lambda表达式

简介: Python函数-lambda表达式

函数-lambda表达式


01 定义lambda表达式


lambda表达式,又称匿名函数,常用来表示内部仅包含 1 行表达式的函数。如果一个函数的函数体仅有 1 行表达式,则该函数就可以用 lambda 表达式来代替。

lambda 表达式的语法格式如下:


func = lambda [arg1[, arg2, ... argN]] : expression 


定义 lambda 表达式,必须使用 lambda 关键字;[arg1[, arg2, … argN]] 作为可选参数,等同于定义函数时要指定的参数列表。expression表示一行表达式,其运算的结果就是函数的返回值。func是一个变量,引用lambda定义的函数对象。


该语法格式转换成普通函数的形式,如下所示:


def func([arg1[, arg2, ... argN]]):
    return expression

显然,使用普通方法定义此函数,需要 3 行代码,而使用 lambda 表达式仅需 1 行。

例如,如果设计一个求 2 个数之和的函数,使用普通函数的方式,定义如下:

def add(x, y):
    return x+ y
print(add(3,4))    # 打印 7

上面程序中,add() 函数内部仅有 1 行表达式,因此该函数可以直接用 lambda 表达式表示:


add = lambda x,y:x+y
print(add(3,4))    # 打印 7


02 lambda表达式与def函数区别


  • lambda 和def的基本用法差不多,参数都是可选,也都会定义函数对象。不同之处如下:
  • lambda可以定义一个匿名函数,而def定义的函数必须有一个名字。这应该是lambda与def两者最大的区别。
  • lambda是一个表达式,而不是一个语句。因此,lambda能够出现在Python语法不允许def出现的地方。例如,在一个列表常量中,或者函数调用的参数中。
  • lambda的主体是一个单个的表达式,而不是一个代码块。lambda包含的代码相当于def中return子句后的代码一样。只能是简单的表达式,所以说lambda的能力小于def,在lambda中只能使用简单的语法,不能使用if else while return等语句。
  • 设计理念也不同:lambda是一个为编写简单的函数而设计的,而def用来处理复杂的任务。



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


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


为什么要使用lambda?


  • lambda函数主要用来写一些小体量的一次性函数,避免污染环境,同时也能简化代码。
  • lambda起到了一种函数速写的作用,允许在使用的代码内嵌入一个函数的定义。如果仅需要嵌入一小段可执行代码的情况下,使用lambda表达式会带来一个更简洁的代码结构。



03 应用


filter()

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


#示例1
l = list(filter(lambda x:True if x % 3 == 0 else False, range(100)))
print(l)
'''
输出结果:
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
'''

如上所示,使用lambda表达式定义了一个匿名函数,用于筛选100以内的3的倍数,并生成一个列表。使用def函数表示如下:


#示例2
def f(x):
    if x % 3 == 0 :
        return True
    else:
        return False
l = list( filter(f, range(100) ))
print(l)            

filter()简单的理解为过滤器,它需要两个参数,function和一个序列(字符串、列表、元组都是序列),过滤器会依次将序列的值传入function中,如果返回True的话,将其重新生成一个列表返回。


map()

map()能够遍历序列,对序列中每个元素进行操作,最终获取新的序列。



#示例3 
li = [11, 22, 33]
sl = [1, 2, 3]
new_list = map(lambda a, b: a + b, li, sl)
print(list(new_list))
# 输出结果为:
[12,24,36]

map()表示映射,filter()表示过滤,map()用法与filter()类似,也是将序列放入函数进行运算,但是,不论运算结果是什么,map()都将逐一反馈,这是map()和filter()的主要区别。注意,filter()和map()中的function都必要有一个返回值。


#示例4
l = list(map(lambda x:True if x % 3 == 0 else False, range(100)))
print(l)
'''
输出结果为:
[True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True, False, False, True]
'''


reduce()

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


#示例5            
from functools import reduce
li = [11,22,33]
result = reduce(lambda a,b:a+b,li)
# reduce的第一个参数,函数必须要有两个参数
# reduce的第二个参数,要循环的序列
# reduce的第三个参数,初始值
print(result)
'''
输出结果:
66
'''

用lambda表达式求n的阶乘。


#示例6 
from functools import reduce
n = 5
print( reduce(lambda x,y:x*y,range(1,n+1)) )
'''
输出结果:
120
'''           



嵌套函数


#示例7 
def f(a):
    return lambda b : a + b
a = f(10)
print( a(20))     # 30


lambda也可以嵌套在一个函数内使用,在上面示例中函数中嵌套了一个lambda表达式。变量a引用的就是lambda表达式定义的函数对象。


#示例8 
#上面示例可以使用两个lambda表示:
x = lambda a: lambda b: a+b
y= x(10)
print(y(20))     # 30


sort()


#示例9 
# 根据每个元祖的第一个元素进行排序
a = [(1, 2), (4, 1), (9, 10), (13, -3)]
a.sort(key=lambda x: x[1])
print(a)


04 总结


  • lambda只是一个表达式,函数体比def简单很多。
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑运算。
  • lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数。
  • 简单单行代码或者一次性的函数可以用lambda函数来写,可以让代码更简洁。
  • 对于复杂函数或者函数体体量大的函数,最好不要用lambda,会增加代码的阅读难度,使代码晦涩难懂。
  • 在非多次调用的函数的情况下,lambda表达式即用既得,提高性能。



目录
相关文章
|
23天前
|
测试技术 数据安全/隐私保护 Python
探索Python中的装饰器:简化和增强你的函数
【10月更文挑战第24天】在Python编程的海洋中,装饰器是那把可以令你的代码更简洁、更强大的魔法棒。它们不仅能够扩展函数的功能,还能保持代码的整洁性。本文将带你深入了解装饰器的概念、实现方式以及如何通过它们来提升你的代码质量。让我们一起揭开装饰器的神秘面纱,学习如何用它们来打造更加优雅和高效的代码。
|
25天前
|
Python
Python编程中正则表达式的使用
【10月更文挑战第22天】正则表达式,一种强大的文本处理工具,在Python编程中有着广泛的应用。本文将介绍如何使用Python中的re库来使用正则表达式,包括如何创建、匹配、查找和替换字符串等。通过学习本文,你将能够掌握Python中正则表达式的基本使用方法。
|
25天前
|
弹性计算 安全 数据处理
Python高手秘籍:列表推导式与Lambda函数的高效应用
列表推导式和Lambda函数是Python中强大的工具。列表推导式允许在一行代码中生成新列表,而Lambda函数则是用于简单操作的匿名函数。通过示例展示了如何使用这些工具进行数据处理和功能实现,包括生成偶数平方、展平二维列表、按长度排序单词等。这些工具在Python编程中具有高度的灵活性和实用性。
|
28天前
|
Python
python的时间操作time-函数介绍
【10月更文挑战第19天】 python模块time的函数使用介绍和使用。
29 4
|
29天前
|
存储 Python
[oeasy]python038_ range函数_大小写字母的起止范围_start_stop
本文介绍了Python中`range`函数的使用方法及其在生成大小写字母序号范围时的应用。通过示例展示了如何利用`range`和`for`循环输出指定范围内的数字,重点讲解了小写和大写字母对应的ASCII码值范围,并解释了`range`函数的参数(start, stop)以及为何不包括stop值的原因。最后,文章留下了关于为何`range`不包含stop值的问题,留待下一次讨论。
21 1
|
29天前
|
安全 数据处理 数据安全/隐私保护
python中mod函数怎么用
通过这些实例,我们不仅掌握了Python中 `%`运算符的基础用法,还领略了它在解决实际问题中的灵活性和实用性。在诸如云计算服务提供商的技术栈中,类似的数学运算逻辑常被应用于数据处理、安全加密等关键领域,凸显了基础运算符在复杂系统中的不可或缺性。
18 0
|
6月前
|
算法 Python 容器
Python编程 - 不调用相关choose库函数,“众数“挑选器、随机挑选器 的源码编程实现
Python编程 - 不调用相关choose库函数,“众数“挑选器、随机挑选器 的源码编程实现
86 0
|
2月前
|
算法 Python
Python编程的函数—内置函数
Python编程的函数—内置函数
|
6月前
|
算法 Python
Python编程实验四:函数的使用
Python编程实验四:函数的使用
91 0
|
6月前
|
存储 程序员 Shell
Python 进阶指南(编程轻松进阶):十、编写高效函数
Python 进阶指南(编程轻松进阶):十、编写高效函数
67 0
下一篇
无影云桌面