详解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中使用Beautiful Soup库的超详细教程
Apr 30 Python
Python中函数的参数定义和可变参数用法实例分析
Jun 04 Python
python中__call__内置函数用法实例
Jun 04 Python
八大排序算法的Python实现
Jan 28 Python
Python numpy 提取矩阵的某一行或某一列的实例
Apr 03 Python
python绘制散点图并标记序号的方法
Dec 11 Python
NumPy 基本切片和索引的具体使用方法
Apr 24 Python
Django自定义模板过滤器和标签的实现方法
Aug 21 Python
用Python写一个自动木马程序
Sep 17 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
Feb 10 Python
python线程join方法原理解析
Feb 11 Python
pytorch 实现多个Dataloader同时训练
May 29 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 操作符与控制结构
2012/03/07 PHP
关于PHP求解三数之和问题详析
2020/11/09 PHP
Prototype RegExp对象 学习
2009/07/19 Javascript
js trim函数 去空格函数与正则集锦
2009/11/20 Javascript
Array.prototype.slice 使用扩展
2010/06/09 Javascript
根据对象的某一属性进行排序的js代码(如:name,age)
2010/08/10 Javascript
提示$ is not defined错误分析及解决
2013/04/09 Javascript
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
JQuery中阻止事件冒泡几种方式及其区别介绍
2014/01/15 Javascript
使用JQuery库提供的扩展功能实现自定义方法
2014/09/09 Javascript
JavaScript操作HTML DOM节点的基础教程
2016/03/11 Javascript
非常实用的js验证框架实现源码 附原理方法
2016/06/08 Javascript
JavaScript制作弹出层效果
2016/12/02 Javascript
JS实现简单抖动效果
2017/06/01 Javascript
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
如何从零开始手写Koa2框架
2019/03/22 Javascript
详解如何使用router-link对象方式传递参数?
2019/05/02 Javascript
Vue项目实现换肤功能的一种方案分析
2019/08/28 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
js实现左右轮播图
2020/01/09 Javascript
Jquery+javascript实现支付网页数字键盘
2020/12/21 jQuery
python的格式化输出(format,%)实例详解
2018/06/01 Python
对python Tkinter Text的用法详解
2018/10/11 Python
Python玩转Excel的读写改实例
2019/02/22 Python
python实现雪花飘落效果实例讲解
2019/06/18 Python
Python.append()与Python.expand()用法详解
2019/12/18 Python
详解基于python的图像Gabor变换及特征提取
2020/10/26 Python
CSS3的新特性介绍
2008/10/31 HTML / CSS
使用html5 canvas绘制圆环动效
2019/06/03 HTML / CSS
优秀实习自我鉴定
2013/12/04 职场文书
中英文自我评价语句
2013/12/20 职场文书
会计职业生涯规划范文
2014/01/04 职场文书
小学节能减排倡议书
2014/05/15 职场文书
工程进度款催款函
2015/06/24 职场文书
党组织结对共建协议书
2016/03/23 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python