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和pyqt实现360的CLable控件
Feb 21 Python
python fabric实现远程部署
Jan 05 Python
Python 获得13位unix时间戳的方法
Oct 20 Python
详解flask表单提交的两种方式
Jul 21 Python
使用python的pexpect模块,实现远程免密登录的示例
Feb 14 Python
python使用celery实现异步任务执行的例子
Aug 28 Python
基于Python实现大文件分割和命名脚本过程解析
Sep 29 Python
windows下Pycharm安装opencv的多种方法
Mar 05 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
Mar 23 Python
python用opencv完成图像分割并进行目标物的提取
May 25 Python
pycharm全局搜索的具体步骤
Jul 28 Python
Python Selenium XPath根据文本内容查找元素的方法
Dec 07 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实现域名whois查询的代码(数据源万网、新网)
2010/02/22 PHP
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
CodeIgniter安全相关设置汇总
2014/07/03 PHP
PHP访问Google Search API的方法
2015/03/05 PHP
PHP调用Mailgun发送邮件的方法
2017/05/04 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
js 异步处理进度条
2010/04/01 Javascript
js 时间格式与时间戳的相互转换示例代码
2013/12/25 Javascript
JS在IE下缺少标识符的错误
2014/07/23 Javascript
处理文本部分内容的TextRange对象应用实例
2014/07/29 Javascript
使用JS画图之点、线、面
2015/01/12 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
2015/10/08 Javascript
JS对大量数据进行多重过滤的方法
2016/11/04 Javascript
JavaScript实现鼠标点击导航栏变色特效
2017/02/08 Javascript
详解angularJS自定义指令间的相互交互
2017/07/05 Javascript
深入理解Vue官方文档梳理之全局API
2017/11/22 Javascript
JS实现滚动条触底加载更多
2019/09/19 Javascript
vue输入框使用模糊搜索功能的实现代码
2020/05/26 Javascript
Python自定义类的数组排序实现代码
2016/08/28 Python
浅析python打包工具distutils、setuptools
2018/04/20 Python
使用python远程操作linux过程解析
2019/12/04 Python
python字典的值可以修改吗
2020/06/29 Python
django form和field具体方法和属性说明
2020/07/09 Python
深入了解Python 变量作用域
2020/07/24 Python
Tarte Cosmetics官网:美国最受欢迎的化妆品公司之一
2017/08/24 全球购物
vue+django实现下载文件的示例
2021/03/24 Vue.js
交通事故赔偿协议书范本
2014/04/15 职场文书
网络舆情信息简报
2015/07/21 职场文书
新课程改革心得体会
2016/01/22 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书
创业计划书之便利店
2019/09/05 职场文书
用Python远程登陆服务器的步骤
2021/04/16 Python
python实现简单区块链结构
2021/04/25 Python
Python网络编程之ZeroMQ知识总结
2021/04/25 Python
Python+OpenCV实现图片中的圆形检测
2022/04/07 Python