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 相关文章推荐
django通过ajax发起请求返回JSON格式数据的方法
Jun 04 Python
Python实现合并字典的方法
Jul 07 Python
Python编程实现删除VC临时文件及Debug目录的方法
Mar 22 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
May 15 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
Jun 14 Python
解决pycharm 安装numpy失败的问题
Dec 05 Python
Pytorch数据拼接与拆分操作实现图解
Apr 30 Python
python实现人工蜂群算法
Sep 18 Python
Opencv+Python识别PCB板图片的步骤
Jan 07 Python
Python列表的深复制和浅复制示例详解
Feb 12 Python
python 制作本地应用搜索工具
Feb 27 Python
Python的flask接收前台的ajax的post数据和get数据的方法
Apr 12 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
Terran剧情介绍
2020/03/14 星际争霸
php一句话cmdshell新型 (非一句话木马)
2009/04/18 PHP
如何用PHP来实现一个动态Web服务器
2015/07/29 PHP
PHP预定义变量9大超全局数组用法详解
2016/04/23 PHP
thinkphp隐藏index.php/home并允许访问其他模块的实现方法
2016/10/13 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
2019/05/06 PHP
laravel5.2表单验证,并显示错误信息的实例
2019/09/29 PHP
jQuery Autocomplete自动完成插件
2010/07/17 Javascript
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
jQuery插件实现无缝滚动特效
2015/11/24 Javascript
全面理解JavaScript中的继承(必看)
2016/06/16 Javascript
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
Javascript生成带参数的二维码示例
2016/10/10 Javascript
Bootstrap如何创建表单
2016/10/21 Javascript
Angularjs使用指令做表单校验的方法
2017/03/31 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
2017/06/19 Javascript
javaScript封装的各种写法
2017/08/14 Javascript
Nodejs调用WebService的示例代码
2017/09/29 NodeJs
一步一步的了解webpack4的splitChunk插件(小结)
2018/09/17 Javascript
js验证账户名是否重复
2020/05/26 Javascript
Linux下python与C++使用dlib实现人脸检测
2018/06/29 Python
设置python3为默认python的方法
2018/10/31 Python
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
2014/04/10 HTML / CSS
新加坡最早生产电动滑板车的制造商之一:FunsToTheFore
2020/09/08 全球购物
如何整合JQuery和Prototype
2014/01/31 面试题
专科毕业生就业推荐信
2013/11/01 职场文书
电脑租赁公司创业计划书
2014/01/08 职场文书
《欢乐的泼水节》教学反思
2014/04/22 职场文书
2014年军人思想汇报范文
2014/10/12 职场文书
风之谷观后感
2015/06/11 职场文书
特种设备安全管理制度
2015/08/06 职场文书
入党积极分子培养联系人意见
2015/08/12 职场文书
如何在CocosCreator里画个炫酷的雷达图
2021/04/16 Javascript
图文详解nginx日志切割的实现
2022/01/18 Servers