详解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 07 Python
Flask框架的学习指南之制作简单blog系统
Nov 20 Python
Python编程修改MP3文件名称的方法
Apr 19 Python
python查询mysql,返回json的实例
Mar 26 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
Apr 19 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
Jul 09 Python
Flask实现跨域请求的处理方法
Sep 27 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
Feb 22 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
May 31 Python
keras 多任务多loss实例
Jun 22 Python
Python3与fastdfs分布式文件系统如何实现交互
Jun 23 Python
C3 线性化算法与 MRO之Python中的多继承
Oct 05 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使用websocket示例详解
2014/03/12 PHP
Linux中为php配置伪静态
2014/12/17 PHP
PHP实现微信网页授权开发教程
2016/01/19 PHP
自制PHP框架之设计模式
2017/05/07 PHP
windows环境下使用Composer安装ThinkPHP5
2018/05/18 PHP
JavaScript学习笔记(十七)js 优化
2010/02/04 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
javascript firefox 自动加载iframe 自动调整高宽示例
2013/08/27 Javascript
使用jQuery快速解决input中placeholder值在ie中无法支持的问题
2014/01/02 Javascript
chrome下img加载对height()的影响示例探讨
2014/05/26 Javascript
返回函数的JavaScript函数
2016/06/14 Javascript
vue 中swiper的使用教程
2018/05/22 Javascript
JS中数据结构之栈
2019/01/01 Javascript
浅谈javascript中的prototype和__proto__的理解
2019/04/07 Javascript
npm 语义版本控制详解
2019/09/10 Javascript
js 判断当前时间是否处于某个一个时间段内
2019/09/19 Javascript
原生js+css实现tab切换功能
2020/09/17 Javascript
python 正则式 概述及常用字符
2009/05/07 Python
Python基于opencv的图像压缩算法实例分析
2018/05/03 Python
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
2019/04/27 Python
Python使用MyQR制作专属动态彩色二维码功能
2019/06/04 Python
Python常用数据类型之间的转换总结
2019/09/06 Python
Python操作word文档插入图片和表格的实例演示
2020/10/25 Python
纯CSS3+DIV实现小三角形边框效果的示例代码
2020/08/03 HTML / CSS
用HTML5制作一个简单的桌球游戏的教程
2015/05/12 HTML / CSS
信息技术专业个人自我评价
2013/12/11 职场文书
大学学习生活感言
2014/01/18 职场文书
小学美术教学反思
2014/02/01 职场文书
道路交通安全实施方案
2014/03/12 职场文书
三八妇女节趣味活动方案
2014/08/23 职场文书
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
2014年小学工作总结
2014/11/26 职场文书
指导教师推荐意见
2015/06/05 职场文书
农村婚礼司仪主持词
2015/06/29 职场文书
成功的商业计划书这样写才最靠谱
2019/07/12 职场文书
在Java中Collection的一些常用方法总结
2021/06/13 Java/Android