前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python之匿名函数

Python之匿名函数

作者头像
企鹅号小编
发布2018-02-05 09:59:16
4620
发布2018-02-05 09:59:16
举报
文章被收录于专栏:编程编程

Python之匿名函数

今天给大家介绍一下Python中的匿名函数。

匿名函数

由关键字来定义

参数列表不需要小括号

冒号不是开启新的语句块的

只能写在一行上

没有return语句,最后一个表达式的值就是返回值

代码语言:python
复制
#一个简单的例子:
In[1]:lambdax:x+1
Out[1]:
# 第一种用法
(lambdax:x+1)(3)# 第一个括号用来改变优先级,第二对括号表示函数调用
In[2]:(lambdax:x+1)(3)
Out[2]:4
# 第二种用法,把匿名函数赋值给变量
f=lambdax:x+1
f(5)
In[3]:f=lambdax:x+1
In[4]:f(5)
Out[4]:6
lambdax,y:x+y
# 也可以这样调用
(lambdax,y:x+y)(3,5)# 第一个括号是用来改变优先级的,第二个括号是调用函数的
add=lambdax,y:x+y
add(3,5)
#也可以设置默认参数:
lambdax,y=1:x+y
add=lambdax,y=1:x+y
add(3)
# 调用的时候也可以用关键字参数
add(x=5)
lambdax,y=1:x+y
add=lambdax,y=1:x+y
add(3)
4
# 调用的时候也可以用关键字参数
add(x=5)
6
#可变参数可以吗?
In[5]:f=lambda*x:x
In[6]:f(1,2,3)
Out[6]:(1,2,3)
In[7]:lst=[1,2,3]
In[8]:f(*lst)
Out[8]:(1,2,3)
#关键字参数可以吗?
In[9]:f=lambda**kw:kw
In[10]:f(a=)
Out[10]:{'a':}
In[11]:dict01={'name':'lavenliu.cn','age':23}
In[12]:f(**dict01)
Out[12]:{'age':23,'name':'lavenliu.cn'}
#可变参数与可变关键字参数同时使用呢?
In[13]:(lambda*args,**kwargs:print(args,kwargs))(*range(3),**{str(x):xforxinrange(3)})
(,1,2){'0':,'1':1,'2':2}
In[14]:(lambda*args,**kwargs:print(args,kwargs))(*range(3),**{str(x):xforxinrange(3)})
(,1,2){'0':,'1':1,'2':2}
#参数槽可以吗?
In[15]:f=lambdax,*,y:x+y
In[16]:f(1,y=3)
Out[16]:4
#普通函数所支持的参数变化,匿名函数都支持。再来一例:
In[17]:concat=lambda*args:''.join(args)
In[18]:concat('a','b','c')
Out[18]:'abc'
In[19]:lower=(lambdax,y:xifx
In[20]:lower(7,3)
Out[20]:3
In[21]:lower('a','b')
Out[21]:'a'
In[22]:lower(2.3,4.5)
Out[22]:2.3
#匿名函数通常和高阶函数配合使用,作为参数传入,或者作为返回值返回。匿名函数最好不要定义成递归函数。
In[29]:fib=lambdan:1ifn==orn==1elsefib(n-1)+fib(n-2)
In[30]:fib(5)
Out[30]:8
#一个例子:
fromcollectionsimportnamedtuple
User=namedtuple('User',['name','age'])
users=[User('lavenliu',23),User('taoqi',20)]
defget_age(user):
returnuser.age
sorted(users,key=get_age)
[User(name='taoqi',age=20),User(name='lavenliu',age=23)]
# 或者使用匿名函数
sorted(users,key=lambdax:x.age)
[User(name='taoqi',age=20),User(name='lavenliu',age=23)]
list(map(lambdax:x.age,users))
list(filter(lambdax:x.age
#自己实现一个map函数,
In[31]:defmap_(fn,it):
...:return[fn(x)forxinit]
...:
In[32]:defsquare(n):
...:returnn**2
...:
In[33]:lst1=[1,2,3,4,5]
# 使用自定义的map函数
In[34]:map_(square,lst1)
Out[34]:[1,4,9,16,25]
#自己实现一个filter函数,
deffilter_(fn,it):
return[xforxinitiffn(x)]

今天的内容就到这里。

本文来自企鹅号 - 小白的技术客栈媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 小白的技术客栈媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档