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 相关文章推荐
pygame实现弹力球及其变速效果
Jul 03 Python
Python文件和流(实例讲解)
Sep 12 Python
Python Tkinter实现简易计算器功能
Jan 30 Python
分享一下Python数据分析常用的8款工具
Apr 29 Python
解决win64 Python下安装PIL出错问题(图解)
Sep 03 Python
flask session组件的使用示例
Dec 25 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
Mar 30 Python
django实现模板中的字符串文字和自动转义
Mar 31 Python
基于python纯函数实现井字棋游戏
May 27 Python
使用keras时input_shape的维度表示问题说明
Jun 29 Python
python 中的命名空间,你真的了解吗?
Aug 19 Python
Python中itertools库的四个函数介绍
Apr 06 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
百度实时推送api接口应用示例
2014/10/21 PHP
yii的CURD操作实例详解
2014/12/04 PHP
推荐几个开源的微信开发项目
2014/12/28 PHP
PHP环境中Memcache的安装和使用
2015/11/05 PHP
PHP+MySQL存储数据常见中文乱码问题小结
2016/06/13 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
HTML-CSS群中单选引发的“事件”
2007/03/05 Javascript
js输出阴历、阳历、年份、月份、周示例代码
2014/01/29 Javascript
javascript实现手机震动API代码
2015/08/05 Javascript
有关JavaScript中call()和apply() 的一些理解
2016/05/20 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
2017/12/12 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
2018/10/09 Javascript
JS多个异步请求 按顺序执行next实现解析
2019/09/16 Javascript
小程序自定义弹框效果
2020/11/16 Javascript
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
[01:18:45]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第三场2月1日
2021/03/11 DOTA
Python单链表简单实现代码
2016/04/27 Python
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
2018/03/22 Python
Python中.join()和os.path.join()两个函数的用法详解
2018/06/11 Python
详解windows python3.7安装numpy问题的解决方法
2018/08/13 Python
对python pandas读取剪贴板内容的方法详解
2019/01/24 Python
Python3.5实现的三级菜单功能示例
2019/03/25 Python
python pandas模块基础学习详解
2019/07/03 Python
基于MATLAB和Python实现MFCC特征参数提取
2019/08/13 Python
python tornado使用流生成图片的例子
2019/11/18 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
python 通过文件夹导入包的操作
2020/06/01 Python
Selenium之模拟登录铁路12306的示例代码
2020/07/31 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
CSS3实现时间轴效果
2016/07/11 HTML / CSS
通过Canvas及File API缩放并上传图片完整示例
2013/08/08 HTML / CSS
业务经理岗位职责
2013/11/11 职场文书
高中地理教学反思
2014/01/29 职场文书
口袋妖怪冰系十大最强精灵,几何雪花排第七,第六类似北极熊
2022/03/18 日漫
日本官方排名前10的动漫,名侦探柯南上榜,第一是一部创造历史的动漫
2022/03/18 日漫