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表达式即用既得,提高性能。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Lambda表达式Python中的一种匿名函数,它可以在一行代码中定义一个函数Lambda表达式通常用于简单的函数,它们可以作为参数传递给其他函数或作为返回值返回。 Lambda表达式的语法如下: lambda 参数列表: 表达式 其中,参数列表是用逗号分隔的形式参数,表达式函数的返回值。 例如,下面的代码定义了一个简单的Lambda函数: f = lambda x: x * x 这个函数接受一个参数x,并返回x的平方。我们可以像调用普通函数一样调用它: print(f(5)) # 输出25 Lambda表达式还可以用于定义匿名函数,例如: g = lambda x, y: x + y 这个函数接受两个参数x和y,并返回它们的和。我们可以像调用普通函数一样调用它: print(g(2, 3)) # 输出5 总之,Lambda表达式Python中一种非常方便的函数定义方式,它可以让我们更加简洁地编写代码。 ### 回答2: Lambda表达式Python函数中的一种简洁方式,它可以定义在一行内的匿名函数。Lambda使用关键字“lambda”来表示,后面跟随一个或多个参数,分隔符为逗号,然后是冒号和一个表达式。返回值是该表达式的结果。 Lambda表达式的基本语法如下: lambda arguments: expression 其中arguments参数可以是0个、1个或多个参数,expression表达式是lambda函数的返回值。 Lambda表达式的使用场景比较广泛,通常用于函数式编程、过滤器(filter)、映射器(map)、排序器(sort)等操作中。 例如,我们可以使用lambda表达式来定义一个简单的函数: x = lambda a : a + 10 print(x(10)) # 输出结果为20 上述例子中,lambda表达式定义了一个参数“a”,表达式为“a+10”,即函数返回值为传入参数a加上10。 当需要对一个列表中的元素进行操作时,我们可以使用map函数结合lambda表达式来实现: lst = [1, 3, 5, 7] result_lst = list(map(lambda x:x*2, lst)) print(result_lst) # 输出结果为[2, 6, 10, 14] 上述例子中,lambda表达式定义了一个参数“x”,表达式为“x*2”,即将列表中的每个元素乘以2。map函数将该lambda表达式应用于lst中的每个元素,返回一个新的列表。 Lambda表达式比较适用于简单的函数定义和一些简单的操作,但对于较为复杂的任务或需要频繁使用的代码,建议还是使用函数进行定义。 ### 回答3: Python是一种广泛使用的编程语言,而函数Python编程的重要部分。在Python中,函数是一个特殊的代码块,可以接受一些输入(参数),并在执行一些操作后返回输出。其中,lambda表达式是定义函数的一种不同方式。 lambda表达式也被称为匿名函数,因为它们可以定义一个没有名称的函数。与普通函数不同,lambda函数只能包含一个表达式,而不是一条语句块。语法如下: lambda 参数: 表达式 下面是一个简单的例子: add = lambda x, y: x + y print(add(2, 3)) # 输出5 在这个例子中,lambda函数的定义是add = lambda x, y: x + y,其中参数是x和y,表达式是x + y。定义后,我们可以像使用普通函数一样使用它。 lambda函数有许多用途。其中之一是作为其他函数的参数,例如在sort()函数中进行排序。例如,我们可以使用lambda函数按照列表中每个元素的第二个元素进行排序。实现方式如下: a = [(1, 2), (4, 1), (9, 10), (13, -3)] a.sort(key=lambda x: x[1]) # 按每个元组的第二个元素进行排序 print(a) 输出结果为:[(13, -3), (4, 1), (1, 2), (9, 10)] 总之,Lambda表达式Python语言中一个十分有用的特性,它允许我们创建匿名函数,使代码变得更加简洁和易读。在实际编程中,可以将其用于诸如函数参数传递、过滤器、排序等许多编程任务中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Token_w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值