Python Lambda函数使用总结详解


Posted in Python onDecember 11, 2019

这篇文章主要介绍了Python Lambda函数使用总结详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

lambda表达式是一种匿名函数,对应python中的自定义函数def,是定义某个函数时比较高级的一种写法。作为python初学者,本文整理了lambda的一些基本用法和特点。

lambda和def的对应关系

定义func函数,计算给定数x的平方

def func(x):
return x*x

等价于

func = lambda x: x*x

其中func是函数名,x是输入参数,x*x是输出结果

输入参数可以有多个,可以接收不定参数如*args或者**kwargs。

f = lambda x, *args, para, **kwargs : [args, para, kwargs]
f(1, 2, 3, para='number', name='Jack', sex='male')
# 输出 [(2, 3), 'number', {'name': 'Jack', 'sex': 'male'}]

有时也可以不指定输入参数,如:

lambda: random.randn()

lambda与map(), filter(), reduce()

lambda表达式返回一个函数,这个函数可以作为其他函数的参数。常用的可以与lambda组合的内置函数有map(), filter(), reduce().

在处理一个可迭代对象如列表,字典等时,可以用map(lambda, x) 代替 for...in...循环,如:

lst = [1, 2, 3, 4, 5]
res = []
for i in lst:
  a = i*i
  res.append(a)

等价于

res = list(map(lambda x:x*x, lst))

可以看到这里的lambda生成的函数直接作为map函数的function参数,对列表的每一个元素进行平方计算

同理可以将lambda用于filter进行筛选,或者reduce累积运算:

from functools import reducelst = [1, 2, 3, 4, 5]f_res = filter(lambda x: x>3, lst)
r_res = reduce(lambda x, y: x*y, lst)

print('大于3的数字有:', list(f_res)) 
print('累乘结果为:', r_res)

输出结果:

大于3的数字有: [4, 5]
累乘结果为: 120

lambda与if条件判断

lambda表达式中可以插入if...else进行条件判断,如

f = lambda x: 'even' if x%2==0 else 'odd'
# f(3)输出结果 odd

等价于

def f(x):<br data-filtered="filtered">if x%2==0:<br data-filtered="filtered">

return 'even'<br data-filtered="filtered">
else:<br data-filtered="filtered">

return 'odd'

注意如果在lambda中使用if进行条件判断,则else是必须声明的,否则会引起报错。如果不返回结果可以用 else None 表示。

if...elif...else的多条件判断也可以用于lambda,但会使得代码过于复杂,所以不推荐。

lambda在pandas中的使用

lambda函数常用于DataFrame或者Series对象下的map、apply、transform方法

import pandas as pd
df = pd.DataFrame({'Age': [22, 21, 22, 21, 20], 'Score': [87, 66, 79, 54, 59]})
df['Pass'] = df.apply(lambda x: 'pass' if x[1]>=60 else 'Not pass', axis=1)

输出新列 'Pass',根据成绩判断通过与否,输出df后结果为:

Age Score  Pass
0  22 87 pass
1  21 66 pass
2  22 79 pass
3  21 54 Not pass
4  20 59 Not pass

x为DataFrame对象,当参数axis=1时,x[1]等于第二列。

当用于Series对象时,以上代码等价于:

df['Pass'] = df['Score'].apply(lambda x: 'pass' if x>60 else 'Not pass')

在pandas中,通过apply,map, transform方法,lambda可以直接应用于Series级别的运算。

当使用applymap方法时,lambda可以应用于DataFrame级别的运算。

lamda的优缺点

lambda的优点:

  • 不需要定义函数名(匿名函数)
  • 代码简洁美观
  • 适用于定义简单的计算

lambda的缺点:

  • 只有一个运算式,不适用于复杂的计算
  • 不够直观,难于理解,增加了维护成本

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pyramid配置session的方法教程
Nov 27 Python
Python常用的日期时间处理方法示例
Feb 08 Python
python编写简单爬虫资料汇总
Mar 22 Python
Python的Django REST框架中的序列化及请求和返回
Apr 11 Python
关于Python中空格字符串处理的技巧总结
Aug 10 Python
使用python 3实现发送邮件功能
Jun 15 Python
pycharm中成功运行图片的配置教程
Oct 28 Python
解决Django后台ManyToManyField显示成Object的问题
Aug 09 Python
Python内置类型性能分析过程实例
Jan 29 Python
Python 实现微信自动回复的方法
Sep 11 Python
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
Jun 11 Python
python编程简单几行代码实现视频转换Gif示例
Oct 05 Python
Python迭代器模块itertools使用原理解析
Dec 11 #Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
Dec 11 #Python
Python partial函数原理及用法解析
Dec 11 #Python
opencv3/python 鼠标响应操作详解
Dec 11 #Python
通过实例简单了解Python中yield的作用
Dec 11 #Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
Dec 11 #Python
centos7中安装python3.6.4的教程
Dec 11 #Python
You might like
php中jQuery插件autocomplate的简单使用笔记
2012/06/14 PHP
PHP防止post重复提交数据的简单例子
2014/06/07 PHP
php中使用websocket详解
2016/09/23 PHP
jQuery 选择器理解
2010/03/16 Javascript
JS声明变量背后的编译原理剖析
2012/12/28 Javascript
js特效,页面下雪的小例子
2013/06/17 Javascript
ExtJS4 表格的嵌套 rowExpander应用
2014/05/02 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
2017/03/06 Javascript
NodeJS学习笔记之Module的简介
2017/03/24 NodeJs
JS 仿支付宝input文本输入框放大组件的实例
2017/11/14 Javascript
vue.js select下拉框绑定和取值方法
2018/03/03 Javascript
Vue.js中关于侦听器(watch)的高级用法示例
2018/05/02 Javascript
Rollup处理并打包JS文件项目实例代码
2018/05/31 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
Python显示进度条的方法
2014/09/20 Python
深入理解Javascript中的this关键字
2015/03/27 Python
Python 加密与解密小结
2018/12/06 Python
Python 多线程不加锁分块读取文件的方法
2018/12/11 Python
python格式化输出保留2位小数的实现方法
2019/07/02 Python
python中封包建立过程实例
2021/02/18 Python
全球第二大家装零售商:Lowe’s
2018/01/13 全球购物
Qoo10台湾站:亚洲领先的在线市场
2018/05/15 全球购物
预订旅游活动、景点和旅游:GetYourGuide
2019/09/29 全球购物
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
.NET初级开发工程师面试题
2014/04/18 面试题
历史专业个人求职信范文
2013/12/07 职场文书
高三政治教学反思
2014/02/06 职场文书
档案工作汇报材料
2014/08/21 职场文书
药店促销活动策划方案
2014/08/24 职场文书
仲裁协议书
2014/09/26 职场文书
三人合伙协议书范本
2014/10/29 职场文书
2014年局领导班子自身建设情况汇报
2014/11/21 职场文书
2015秋季田径运动会广播稿
2015/08/19 职场文书
干货分享:推荐信写作技巧!
2019/06/21 职场文书
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js