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常用随机数与随机字符串方法实例
Apr 09 Python
介绍Python中内置的itertools模块
Apr 29 Python
python 简单的多线程链接实现代码
Aug 28 Python
Python探索之SocketServer详解
Oct 28 Python
详解python的sorted函数对字典按key排序和按value排序
Aug 10 Python
基于python if 判断选择结构的实例详解
May 06 Python
解决tensorboard多个events文件显示紊乱的问题
Feb 15 Python
Python socket连接中的粘包、精确传输问题实例分析
Mar 24 Python
完美解决jupyter由于无法import新包的问题
May 26 Python
Python如何实现后端自定义认证并实现多条件登陆
Jun 22 Python
python pandas dataframe 去重函数的具体使用
Jul 20 Python
Django修改app名称和数据表迁移方案实现
Sep 17 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远程连接oracle数据库操作实现方法图文详解
2019/04/11 PHP
js对象之JS入门之Array对象操作小结
2011/01/09 Javascript
JavaScript中变量声明有var和没var的区别示例介绍
2014/09/15 Javascript
js创建对象的方法汇总
2016/01/07 Javascript
微信jssdk用法汇总
2016/07/16 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
2016/12/01 Javascript
数组Array的一些方法(总结)
2017/02/17 Javascript
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
Vue入门之animate过渡动画效果
2018/04/08 Javascript
JavaScript碎片—函数闭包(模拟面向对象)
2019/03/13 Javascript
浅谈bootstrap layer.open中end的使用方法
2019/09/12 Javascript
卸载vue2.0并升级vue_cli3.0的实例讲解
2020/02/16 Javascript
[48:24]完美世界DOTA2联赛循环赛LBZS vs Forest 第一场 10月30日
2020/10/31 DOTA
[38:38]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.17
2020/12/18 DOTA
Python栈的实现方法示例【列表、单链表】
2020/02/22 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
2020/04/08 Python
重写django的model下的objects模型管理器方式
2020/05/15 Python
python主要用于哪些方向
2020/07/05 Python
简洁自适应404页面HTML好看的404源码
2020/12/16 HTML / CSS
草莓网化妆品加拿大网站:Strawberrynet Canada
2016/09/20 全球购物
Photobook澳大利亚:制作相片书,婚礼卡,旅行相簿
2017/01/12 全球购物
支票、地址标签、包装纸和慰问卡:Current Catalog
2018/01/30 全球购物
英国蛋糕装饰用品一站式商店:Craft Company
2019/03/18 全球购物
Big Green Smile法国:领先的英国有机和天然产品在线商店
2021/01/02 全球购物
班级德育工作实施方案
2014/02/21 职场文书
《可爱的动物》教学反思
2014/02/22 职场文书
党建工作先进材料
2014/05/02 职场文书
跑操口号
2014/06/12 职场文书
教师国庆节演讲稿范文2014
2014/09/21 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
2015年感恩母亲节活动方案
2015/05/04 职场文书
庆祝教师节主持词
2015/07/06 职场文书
同乡会致辞
2015/07/30 职场文书
社区服务活动感想
2015/08/11 职场文书
Nginx反向代理、重定向
2022/04/13 Servers