详解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 当前全局变量和入口参数的所有属性
Jul 01 Python
python实现从网络下载文件并获得文件大小及类型的方法
Apr 28 Python
用Python实现命令行闹钟脚本实例
Sep 05 Python
python3.4实现邮件发送功能
May 28 Python
Flask模拟实现CSRF攻击的方法
Jul 24 Python
pandas DataFrame 删除重复的行的实现方法
Jan 29 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
Apr 11 Python
Python实现滑动平均(Moving Average)的例子
Aug 24 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
Nov 26 Python
python 实现保存最新的三份文件,其余的都删掉
Dec 22 Python
GitHub上值得推荐的8个python 项目
Oct 30 Python
Python Spyder 调出缩进对齐线的操作
Feb 26 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
这部番真是良心,画质好到像风景区,剧情让人跟着小公会热血沸腾
2020/03/10 日漫
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
PHP安装memcached扩展笔记
2015/05/28 PHP
8个必备的PHP功能开发
2015/10/02 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
thinkphp框架下404页面设置 仅三步
2016/05/14 PHP
Yii 2.0在Grid中格式化时间方法示例
2017/06/06 PHP
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
2012/03/01 Javascript
JavaScript的继承的封装介绍
2013/10/15 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
Bootstrap编写一个同时适用于PC、平板、手机的登陆页面
2016/06/30 Javascript
jQuery Select下拉框操作小结(推荐)
2016/07/22 Javascript
ReactJs快速入门教程(精华版)
2016/11/28 Javascript
Bootstrap基本组件学习笔记之分页(12)
2016/12/08 Javascript
vue组件间通信解析
2017/03/01 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
2017/04/14 Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
2017/11/22 Javascript
jquery应用实例分享_实现手风琴特效
2018/02/01 jQuery
Vue中rem与postcss-pxtorem的应用详解
2019/11/20 Javascript
jquery选择器和属性对象的操作实例分析
2020/01/10 jQuery
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
2020/02/01 Javascript
Vue简单实现原理详解
2020/05/07 Javascript
PyMongo安装使用笔记
2015/04/27 Python
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
python使用Flask操作mysql实现登录功能
2018/05/14 Python
python plotly绘制直方图实例详解
2019/07/22 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
python openCV实现摄像头获取人脸图片
2020/08/20 Python
介绍一下SQL中union,intersect和minus
2012/04/05 面试题
法院实习人员自我鉴定
2013/09/26 职场文书
数控专业个人求职信范例
2013/11/29 职场文书
业绩考核岗位职责
2014/02/01 职场文书
会计系毕业求职信
2014/08/07 职场文书
怀孕辞职信怎么写
2015/02/28 职场文书
2015年技术员工作总结
2015/04/10 职场文书
keepalived + nginx 实现高可用方案
2022/12/24 Servers