详解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实现遍历windows所有窗口并输出窗口标题的方法
Mar 13 Python
简单说明Python中的装饰器的用法
Apr 24 Python
Python实现购物程序思路及代码
Jul 24 Python
python 读取DICOM头文件的实例
May 07 Python
python 获取当天每个准点时间戳的实例
May 22 Python
pandas 实现字典转换成DataFrame的方法
Jul 04 Python
python DataFrame 取差集实例
Jan 30 Python
python实现图片转字符小工具
Apr 30 Python
numpy下的flatten()函数用法详解
May 27 Python
Python Numpy中数据的常用保存与读取方法
Apr 01 Python
django 外键创建注意事项说明
May 20 Python
Django搭建项目实战与避坑细节详解
Dec 06 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/12/06 PHP
PHP 飞信好友免费短信API接口开源版
2010/07/22 PHP
使用图灵api创建微信聊天机器人
2015/07/23 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
2010/06/28 Javascript
让table变成exls的示例代码
2014/03/24 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
AngularJS表单编辑提交功能实例
2015/02/13 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
JS实现间歇滚动的运动效果实例
2016/12/22 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
2017/08/14 Javascript
前端防止用户重复提交js实现代码示例
2018/09/07 Javascript
详解Node.js读写中文内容文件操作
2018/10/10 Javascript
自定义Vue中的v-module双向绑定的实现
2019/04/17 Javascript
小程序实现层叠卡片滑动效果
2019/08/26 Javascript
Python基于Tkinter实现的记事本实例
2015/06/17 Python
浅谈Python编程中3个常用的数据结构和算法
2019/04/30 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
纯css3使用vw和vh实现自适应的方法
2018/02/09 HTML / CSS
英国最大的笔记本电脑直销专家:Laptops Direct
2019/07/20 全球购物
C和C++经典笔试题附答案解析
2014/08/18 面试题
最受欢迎的自我评价
2013/12/22 职场文书
大学生学业生涯规划
2014/01/05 职场文书
总经理司机岗位职责
2014/02/06 职场文书
人力资源经理的岗位职责
2014/03/02 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
公司证明怎么写
2014/09/22 职场文书
2014年爱国卫生工作总结
2014/11/22 职场文书
法定代表人身份证明书
2015/06/18 职场文书
尊师重教主题班会
2015/08/14 职场文书
2016庆祝国庆67周年宣传语
2015/11/25 职场文书
2021年国产动漫公司排行前十名,玄机科技上榜,第二推出过铠甲勇士
2022/03/18 杂记
vue组件vue-esign实现电子签名
2022/04/21 Vue.js
html,css,javascript是怎样变成页面的
2023/05/07 HTML / CSS