详解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 循环遍历字典元素的简单方法
Sep 11 Python
numpy中索引和切片详解
Dec 15 Python
python中matplotlib的颜色及线条控制的示例
Mar 16 Python
详解Django之admin组件的使用和源码剖析
May 04 Python
PowerBI和Python关于数据分析的对比
Jul 11 Python
pycharm激活码有效到2020年11月底
Sep 18 Python
Python虚拟环境的创建和包下载过程分析
Jun 19 Python
利用scikitlearn画ROC曲线实例
Jul 02 Python
python+requests接口自动化框架的实现
Aug 31 Python
如何使用python写截屏小工具
Sep 29 Python
python Timer 类使用介绍
Dec 28 Python
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
Nov 11 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
Php做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
PHP使用PHPexcel导入导出数据的方法
2015/11/14 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
2016/04/07 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
jquery tools之tooltip
2009/07/25 Javascript
JS的replace方法详细介绍
2012/11/09 Javascript
node.js中的console.log方法使用说明
2014/12/09 Javascript
JQuery PHP图片在线裁剪实例
2020/07/27 Javascript
利用JQuery操作iframe父页面、子页面的元素和方法汇总
2017/09/10 jQuery
vue+element实现打印页面功能
2019/05/20 Javascript
详解小程序如何改变onLoad的执行时机
2019/11/01 Javascript
js cavans实现静态滚动弹幕
2020/05/21 Javascript
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
Python模块学习 filecmp 文件比较
2012/08/27 Python
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
python 通过麦克风录音 生成wav文件的方法
2019/01/09 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
python带参数打包exe及调用方式
2019/12/21 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
2020/01/08 Python
pycharm下pyqt4安装及环境配置的教程
2020/04/24 Python
html5中如何将图片的绝对路径转换成文件对象
2018/01/11 HTML / CSS
video.js支持m3u8格式直播的实现示例
2020/05/20 HTML / CSS
Gweniss格温妮丝女包官网:英国纯手工制造潮流包包品牌
2018/02/07 全球购物
美国购买汽车零件网站:Buy Auto Parts
2018/04/02 全球购物
英国电子专家:maplin
2019/09/04 全球购物
群胜软件Java笔试题
2012/09/29 面试题
Python里面search()和match()的区别
2016/09/21 面试题
教师通用专业自荐书范文
2014/02/11 职场文书
优秀管理者事迹材料
2014/05/22 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
日语系毕业求职信
2014/07/27 职场文书
2014应届本科生自我评价
2014/09/13 职场文书
离婚协议书范本2014
2014/10/27 职场文书
国际贸易实务实训报告
2014/11/05 职场文书
Oracle查看表空间使用率以及爆满解决方案详解
2022/07/23 Oracle