Python基础——第九章 第一部分 匿名函数及自定义函数,区别

在前一章学习了函数定义,如果求a的3次方这样的函数,我们可以这样做

def func(a):
    return a**3
re1=func(2)
print(re1)   '''运行结果:8'''

那么,还有别的方法吗?

进入今天的主题——匿名函数

1、匿名函数

想实现函数的功能,不想给函数命名

lambda 参数:表达式

# lambda 参数:表达式
re2 = lambda b:b**3
print(re2)          #运行结果:<function <lambda> at 0x0000000002567E50>   若不调用的话,打印的结果是函数体
print(re2(2))       #运行结果:8      需要调用才可以输出结果

前面还提到filter函数,可以过滤序列满足条件的元素,但是使用前需要先定义一个函数,那么有没有更简单的方法呢?

#filter(函数,序列)


#利用定义函数的方法
def func(x):
    return x>10
li=[1,111,23,54,4,8,1,1,745,2,4,22,65,2]  #列表

print(list(filter(func,li)))  '''执行结果:[111, 23, 54, 745, 22, 65]'''



#利用匿名函数的方法

print(list(filter(lambda a:a>5,[1,2,4,5,7,88,9,6])))

从以上对比,定义函数的方法需要用4行语句,而用匿名函数的方法仅1行语句,这样可以大大提升程序的效率!

注意:

  • lambda只是一个表达式,函数体比def简单很多。
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
  • lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。

2、匿名函数参数

func = lambda x,y,z:x+y+z
print(func(2,5,9))       '''结果:16'''



#默认参数
func= lambda x='I',y=' Want',z=' You':x+y+z
print(func())              '''结果:I Want You'''
print(func(y=' Love'))     '''结果:I Love You'''

3、lambda和普通的函数的区别:

1、匿名函数省去了定义过程,使得程序更简洁优化

2、匿名函数省去了对函数命名的过程,也避免了函数名冲突的问题

3、匿名函数不需要return来返回值,表达式本身就是返回值

猜你喜欢

转载自blog.csdn.net/weixin_44435602/article/details/115023044