详解Python的Lambda函数与排序


Posted in Python onOctober 25, 2016

lambda函数是一种快速定义单行的最小函数,是从 Lisp 借用来的,可以用在任何需要函数的地方。下面的例子比较了传统的函数与lambda函数的定义方式。

前几天看到了一行求1000的阶乘的Python代码

Python代码

print  reduce(lambda  x,y:x*y,  range(1,  1001))

一下子被python代码的精简与紧凑所折服,故对代码进行了简单的分析。

reduce与range都是Python的内置函数。

range(1,1001)表示生成1到1000的连续整数列表(List)。

reduce(functionA,iterableB),functionA为需要两个变量的函数,并返回一个值。iterableB为可迭代变量,如List等。reduce函数将B中的元素从左到右依次传入函数A中,再用函数A返回的结果替代传入的参数,反复执行,则可将B reduce成一个单值。在此,是将1到1000的连续整数列表传入lambda函数并用两个数的积替换列表中的数,实际的计算过程为:(...((1×2)×3)×4)×...×1000),最后的结果即1000的阶乘。

下面来介绍一下lambda函数。

lambda函数是一种快速定义单行的最小函数,是从 Lisp 借用来的,可以用在任何需要函数的地方。下面的例子比较了传统的函数与lambda函数的定义方式:

>>> def f(x,y):  
...   return x*y  
...    
>>> f(2,3)  
 
>>> g = lambda x,y: x*y  
>>> g(2,3)

可以看到,两个函数得到的结果一样,而对于实现简单功能的函数来说,使用lambda函数来定义更加精简灵活,还可以直接把函数赋值给一个变量,用变量名来表示函数名。

其实lambda函数在很多时候都是不需要赋值给一个变量的(如前文中求阶乘的过程)。

使用lambda函数还有一些注意事项:

lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。

lambda 函数不能包含命令,包含的表达式不能超过一个。

下面简单演示一下如何使用lambda函数实现自定义排序。

class People: 
  age=0 
  gender='male' 
 
  def __init__(self, age, gender):  
    self.age = age  
    self.gender = gender 
  def toString(self): 
    return 'Age:'+str(self.age)+'\tGender:'+self.gender 
 
List=[People(21,'male'),People(20,'famale'),People(34,'male'),People(19,'famale')] 
print 'Befor sort:' 
for p in List: 
  print p.toString() 
 
List.sort(lambda p1,p2:cmp(p1.age,p2.age)) 
print '\nAfter ascending sort:' 
for p in List: 
  print p.toString() 
 
List.sort(lambda p1,p2:-cmp(p1.age,p2.age)) 
print '\nAfter descending sort:' 
for p in List: 
  print p.toString()

上面的代码定义了一个People类,并通过lambda函数,实现了对包含People类对象的列表按照People的年龄,进行升序和降序排列。运行结果如下:

Befor sort:  
Age:21 Gender:male  
Age:20 Gender:famale  
Age:34 Gender:male  
Age:19 Gender:famale  
 
After ascending sort:  
Age:19 Gender:famale  
Age:20 Gender:famale  
Age:21 Gender:male  
Age:34 Gender:male  
 
After descending sort:  
Age:34 Gender:male  
Age:21 Gender:male  
Age:20 Gender:famale  
Age:19 Gender:famale 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
浅谈Python中的数据类型
May 05 Python
Python科学画图代码分享
Nov 29 Python
python贪婪匹配以及多行匹配的实例讲解
Apr 19 Python
PySide和PyQt加载ui文件的两种方法
Feb 27 Python
使用selenium模拟登录解决滑块验证问题的实现
May 10 Python
使用Python轻松完成垃圾分类(基于图像识别)
Jul 09 Python
Django Form 实时从数据库中获取数据的操作方法
Jul 25 Python
Python random模块制作简易的四位数验证码
Feb 01 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
May 20 Python
python查看矩阵的行列号以及维数方式
May 22 Python
Python xlwt模块使用代码实例
Jun 10 Python
Jupyter Notebook添加代码自动补全功能的实现
Jan 07 Python
Python脚本实现Web漏洞扫描工具
Oct 25 #Python
python+django快速实现文件上传
Oct 24 #Python
python实现简单爬虫功能的示例
Oct 24 #Python
简单谈谈Python中的反转字符串问题
Oct 24 #Python
Python 内置函数complex详解
Oct 23 #Python
Python检测生僻字的实现方法
Oct 23 #Python
python 写入csv乱码问题解决方法
Oct 23 #Python
You might like
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
2020/02/11 PHP
windows系统下简单nodejs安装及环境配置
2013/01/08 NodeJs
js操纵跨frame的三级联动select下拉选项实例介绍
2013/05/19 Javascript
javascript实现禁止复制网页内容
2014/12/16 Javascript
jQuery源码解读之addClass()方法分析
2015/02/20 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
js实现无缝循环滚动
2020/06/23 Javascript
Vue.js每天必学之方法与事件处理器
2016/09/06 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
微信小程序之数据双向绑定与数据操作
2017/05/12 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
linux 后台运行node服务指令方法
2018/05/23 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
2020/08/18 Javascript
JavaScript 实现轮播图特效的示例
2020/11/05 Javascript
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
python实现红包裂变算法
2016/02/16 Python
[原创]Python入门教程4. 元组基本操作
2018/10/31 Python
python列表,字典,元组简单用法示例
2019/07/11 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
2019/08/06 Python
3行Python代码实现图像照片抠图和换底色的方法
2019/10/10 Python
Python3 把一个列表按指定数目分成多个列表的方式
2019/12/25 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
jupyter notebook 实现matplotlib图动态刷新
2020/04/22 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
印度首个本地在线平台:nearbuy
2019/03/28 全球购物
Ootori在线按摩椅店:一家专业的按摩椅制造商
2019/04/10 全球购物
介绍一下Java中标识符的命名规则
2014/02/03 面试题
社区活动总结报告
2014/05/05 职场文书
科长竞聘演讲稿
2014/05/16 职场文书
简历自我评价模板
2015/03/11 职场文书
初中开学典礼新闻稿
2015/07/17 职场文书
三严三实·严以用权心得体会
2016/01/12 职场文书
商业计划书范文
2019/04/24 职场文书