详解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的XSS测试工具XSStrike使用方法
Jul 29 Python
python3学习之Splash的安装与实例教程
Jul 09 Python
python 同时运行多个程序的实例
Jan 07 Python
关于Pycharm无法debug问题的总结
Jan 19 Python
python 将字符串完成特定的向右移动方法
Jun 11 Python
python设置随机种子实例讲解
Sep 12 Python
python列表删除和多重循环退出原理详解
Mar 26 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
Apr 15 Python
python实现与redis交互操作详解
Apr 21 Python
python写文件时覆盖原来的实例方法
Jul 22 Python
Python中常见的反爬机制及其破解方法总结
Jun 10 Python
分享python函数常见关键字
Apr 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
如何使用PHP中的字符串函数
2006/11/24 PHP
关于mysql 字段的那个点为是定界符
2007/01/15 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
php框架CodeIgniter主从数据库配置方法分析
2018/05/25 PHP
用Javscript实现表单复选框的全选功能
2007/05/25 Javascript
JS 常用校验函数
2009/03/26 Javascript
jQuery中校验时间格式的正则表达式小结
2013/09/22 Javascript
node-webkit打包成exe文件被360误报木马的解决方法
2015/03/11 Javascript
js性能优化技巧
2015/11/29 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
2015/12/31 Javascript
jquery通过name属性取值的简单实现方法
2016/06/20 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
2016/12/14 Javascript
javascript数据结构之串的概念与用法分析
2017/04/12 Javascript
jquery.picsign图片标注组件实例详解
2018/02/02 jQuery
React Form组件的实现封装杂谈
2018/05/07 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
2018/09/14 Javascript
d3绘制基本的柱形图的实现代码
2018/12/12 Javascript
微信小程序登录态和检验注册过没的app.js写法
2019/05/22 Javascript
js实现随机点名程序
2020/09/17 Javascript
JS Generator 函数的含义与用法实例总结
2020/04/08 Javascript
Vue中使用JsonView来展示Json树的实例代码
2020/11/16 Javascript
python中的多重继承实例讲解
2014/09/28 Python
Python实现telnet服务器的方法
2015/07/10 Python
Python缩进和冒号详解
2016/06/01 Python
python中将正则过滤的内容输出写入到文件中的实例
2018/10/21 Python
对python3标准库httpclient的使用详解
2018/12/18 Python
PyTorch中反卷积的用法详解
2019/12/30 Python
压铸汽车模型收藏家:Diecastmodelswholesale.com
2016/12/21 全球购物
英国曼彻斯特宠物用品品牌:Bunty Pet Products
2019/07/27 全球购物
路德维希•贝克(LUDWIG BECK)中文官网:德国大型美妆百货
2020/09/19 全球购物
《长城》教学反思
2014/02/14 职场文书
工地安全标语
2014/06/07 职场文书
道歉信怎么写
2015/05/12 职场文书
课文《燕子》教学反思
2016/02/17 职场文书
python 详解turtle画爱心代码
2022/02/15 Python