详解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 26 Python
Python实现模拟登录及表单提交的方法
Jul 25 Python
详解Python异常处理中的Finally else的功能
Dec 29 Python
Python机器学习logistic回归代码解析
Jan 17 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
May 18 Python
Python FTP两个文件夹间的同步实例代码
May 25 Python
python使用xlsxwriter实现有向无环图到Excel的转换
Dec 12 Python
Python实现微信好友的数据分析
Dec 16 Python
python中的 zip函数详解及用法举例
Feb 16 Python
keras实现VGG16 CIFAR10数据集方式
Jul 07 Python
Python WSGI 规范简介
Apr 11 Python
python中的sys模块和os模块
Mar 20 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
建立动态的WML站点(三)
2006/10/09 PHP
php一个解析字符串排列数组的方法
2015/05/12 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
2015/10/26 PHP
Yii开启片段缓存的方法
2016/03/28 PHP
通过php动态传数据到highcharts
2017/04/05 PHP
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
2017/07/10 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
jQuery实现原理的模拟代码 -6 代码下载
2010/08/16 Javascript
js 静态动态成员 and 信息的封装和隐藏
2011/05/29 Javascript
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
2013/09/30 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
2013/12/25 Javascript
JS使用oumousemove和oumouseout动态改变图片显示的方法
2015/03/31 Javascript
Three.js学习之网格
2016/08/10 Javascript
js编写三级联动简单案例
2016/12/21 Javascript
JavaScript中Promise的使用详解
2017/02/26 Javascript
xmlplus组件设计系列之网格(DataGrid)(10)
2017/05/05 Javascript
React中使用collections时key的重要性详解
2017/08/07 Javascript
JavaScript-定时器0~9抽奖系统详解(代码)
2017/08/16 Javascript
ng-events类似ionic中Events的angular全局事件
2018/09/05 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
一文秒懂JavaScript构造函数、实例、原型对象以及原型链
2020/08/25 Javascript
[40:10]2015国际邀请赛全明星表演赛
2015/08/07 DOTA
浅析python 中__name__ = '__main__' 的作用
2014/07/05 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
2020/01/18 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
2020/02/27 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
Adobe Html5 Extension开发初体验图文教程
2017/11/14 HTML / CSS
AmazeUI 列表的实现示例
2020/08/17 HTML / CSS
英国最大的独立家具零售商:Furniture Village
2016/09/06 全球购物
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
Otticanet美国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
德国最大的婴儿用品网上商店:Kidsroom.de(支持中文)
2020/09/02 全球购物
社团成立邀请函
2014/01/08 职场文书
村长党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
使用Redis做预定库存缓存功能
2022/04/02 Redis