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 相关文章推荐
Python实现读取并保存文件的类
May 11 Python
详解python的webrtc库实现语音端点检测
May 31 Python
Python实现PS图像调整颜色梯度效果示例
Jan 25 Python
Python读取本地文件并解析网页元素的方法
May 21 Python
Python smtplib实现发送邮件功能
May 22 Python
python实现决策树ID3算法的示例代码
May 30 Python
详解PyCharm配置Anaconda的艰难心路历程
Aug 13 Python
Python3按一定数据位数格式处理bin文件的方法
Jan 24 Python
浅谈Python爬虫基本套路
Mar 25 Python
微信公众号token验证失败解决方案
Jul 22 Python
对Python获取屏幕截图的4种方法详解
Aug 27 Python
Pycharm 如何设置HTML文件自动补全代码或标签
May 21 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新手用的Insert和Update语句构造类
2012/03/31 PHP
PHP迭代器实现斐波纳契数列的函数
2013/11/12 PHP
php判断两个浮点数是否相等的方法
2015/03/14 PHP
php定义参数数量可变的函数用法实例
2015/03/16 PHP
php生成不重复随机数、数组的4种方法分享
2015/03/30 PHP
PHP Web木马扫描器代码分享
2015/09/06 PHP
PHP获取客户端及服务器端IP的封装类
2016/07/21 PHP
PHP 数组黑名单/白名单实例代码详解
2019/06/04 PHP
细品javascript 寻址,闭包,对象模型和相关问题
2009/04/27 Javascript
jquery 问答知识整理
2010/02/11 Javascript
JavaScript页面刷新与弹出窗口问题的解决方法
2010/03/02 Javascript
jQuery.buildFragment使用方法及思路分析
2013/01/07 Javascript
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
基于Jquery+Ajax+Json实现分页显示附效果图
2014/07/30 Javascript
JQuery限制复选框checkbox可选中个数的方法
2015/04/20 Javascript
jQuery根据表单name获取值的方法
2016/05/24 Javascript
为JQuery EasyUI 表单组件增加焦点切换功能的方法
2017/04/13 jQuery
js使用highlight.js高亮你的代码
2017/08/18 Javascript
JS实现的简单四则运算计算器功能示例
2017/09/27 Javascript
Angular实现的table表格排序功能完整示例
2017/12/22 Javascript
浅谈React前后端同构防止重复渲染
2018/01/05 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
2018/12/09 Javascript
BootStrap模态框闪退问题实例代码详解
2018/12/10 Javascript
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
Python2.7编程中SQLite3基本操作方法示例
2017/08/09 Python
python+influxdb+shell编写区域网络状况表
2018/07/27 Python
获取django框架orm query执行的sql语句实现方法分析
2019/06/20 Python
python实现简单聊天室功能 可以私聊
2019/07/12 Python
Python爬虫:Request Payload和Form Data的简单区别说明
2020/04/30 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
会计电算化应届生自荐信
2014/02/25 职场文书
企业法人代表证明书
2014/09/27 职场文书
幼儿园小班家长评语
2014/12/30 职场文书
银行培训心得体会范文
2016/01/09 职场文书
《金钱的魔力》教学反思
2016/02/20 职场文书
小程序教您怎样你零成本推广获取数万用户的方法
2019/07/30 职场文书