python中匿名函数的关键字_Python匿名函数(lambda函数)

匿名函数—— 一行函数

lambda —— 关键字

x是普通函数的形参(位置,关键字...)可以不接收参数(x可以不写)

:x是普通函数的函数值(只能返回一个数据类型)(:x返回值必须写)

1)此函数不是没有名字,他是有名字的,他的名字就叫做lambda

2)lambda 是定义匿名函数的关键字,相当于函数的def.

3)lambda 后面直接加形参,形参加多少都可以,只要用逗号隔开就行。

func = lambda a, b, *args, sex='alex', c, **kwargs: kwargs

print(func(3, 4, c=666, name='alex'))

结果:{'name': 'alex'}

# 所有类型的形参都可以加,但是一般使用匿名函数只是加位置参数,其他的用不到。

把匿名函数拆开写,如下

def func(a, b, *args, sex='alex', c, **kwargs):

return kwargs

a = func(3, 4, c=666, name='alex')

print(a)

结果:{'name': 'alex'}

4)返回值在冒号之后设置,返回值和正常的函数一样,可以是任意数据类型。(但是想要返回多个元素要以容器的形式返回)

5)匿名函数不管多复杂.只能写一行.且逻辑结束后直接返回数据

格式:lambda x:x

print((lambda x: x + 6)(5))

结果:11

def func(x):

return x + 6

print(func(5))

结果:11

此处使用列表推导式,返回值是地址

lst = [lambda :i for i in range(5)]

print(lst)

拆解成函数:

lis = []

for i in range(5):

def func():

return i

a = func

lis.append(a)

print(lis)

结果:[, , , , ]

lambda表达式是可以嵌套的

action = (lambdax : (lambda y : x + y))

a = action(10)

a(5)

结果:15

这就是一个用lambda实现的闭包,与普通闭包一样,内嵌lambda表达式可以获得上层lambda函数的变量。

匿名函数的使用

匿名函数通常被用作高阶函数(higher-order function,参数为函数的函数)的参数。比如,几个内置函数:filter(),map(),reduce()。下面我们分别看看这几个函数的用法及达到相同效果的python另一种特征的用法

filter函数

lis = [1, 2, 3, 4]

re = filter(lambda x: x % 2 == 0, lis)

print(list(re))

result1 = [x for x in lis if x % 2 == 0]

print(result1)

结果:[2,4]

[2,4]

map函数

lis = [1, 2, 3]

result = map(lambda x: x*2, lis)# 使用lambda函数

print(list(result))

result1 = [x*2 for x in lis]#使用列表推导式

print(result1)

结果:[2, 4, 6]

[2, 4, 6]

reduce函数

from functools import reduce

lis = [1, 2, 3, 4]

result = reduce(lambda x, y: x+y, lis)

print(result)

结果:10

在Python2.x版本中recude是直接 import就可以的, Python3.x版本中需要从functools这个包中导入

除reduce函数的替代用法比较特殊外,map和filter函数都可以使用列表推导式代替。据说,龟叔本打算将 lambda 和 reduce 都从全局名字空间都移除, 舆论说龟叔不喜lambda 和 reduce最后lambda没删除是因为和一个人给龟叔写了好多封,进行交流然后把lambda保住了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值