详解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基础教程之字典操作详解
Mar 25 Python
Python做简单的字符串匹配详解
Mar 21 Python
python正则表达式re之compile函数解析
Oct 25 Python
Windows下Anaconda2安装NLTK教程
Sep 19 Python
解决python明明pip安装成功却找不到包的问题
Aug 28 Python
使用Python第三方库pygame写个贪吃蛇小游戏
Mar 06 Python
Python OrderedDict字典排序方法详解
May 21 Python
pygame用blit()实现动画效果的示例代码
May 28 Python
Python json格式化打印实现过程解析
Jul 21 Python
Django admin组件的使用
Oct 24 Python
Django URL参数Template反向解析
Nov 24 Python
教你漂亮打印Pandas DataFrames和Series
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
德劲1102收音机的打理维修案例
2021/03/02 无线电
php _autoload自动加载类与机制分析
2012/02/10 PHP
用Simple Excel导出xls实现方法
2012/12/06 PHP
javascript编程起步(第二课)
2007/02/27 Javascript
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
IE JS编程需注意的内存释放问题
2009/06/23 Javascript
window.open打开页面居中显示的示例代码
2013/12/27 Javascript
浅谈jQuery效果函数
2016/09/16 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
flexslider.js实现移动端轮播
2017/02/05 Javascript
Vue.js基础指令实例讲解(各种数据绑定、表单渲染大总结)
2017/07/03 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
2019/05/09 Javascript
JS实现使用POST方式发送请求
2019/08/30 Javascript
js点击事件的执行过程实例分析【冒泡与捕获】
2020/04/11 Javascript
浅谈JavaScript中的“!!”作用
2020/08/03 Javascript
vue select 获取value和lable操作
2020/08/28 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
2020/11/06 Javascript
举例讲解Python设计模式编程的代理模式与抽象工厂模式
2016/01/16 Python
Python 获得13位unix时间戳的方法
2017/10/20 Python
python密码错误三次锁定(实例讲解)
2017/11/14 Python
详解python websocket获取实时数据的几种常见链接方式
2019/07/01 Python
Python argparse模块应用实例解析
2019/11/15 Python
Python如何使用函数做字典的值
2019/11/30 Python
Python word文本自动化操作实现方法解析
2020/11/05 Python
css3 border-image使用说明
2010/06/23 HTML / CSS
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
语文教育专业应届生求职信
2013/11/23 职场文书
统计系教授推荐信
2014/02/28 职场文书
参观接待方案
2014/03/17 职场文书
2014基建处领导班子“四风”对照检查材料思想汇报
2014/10/04 职场文书
党员干部三严三实心得体会
2014/10/13 职场文书
关于战胜挫折的名言警句大全!
2019/07/05 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书
Spring依赖注入多种类型数据的示例代码
2022/03/31 Java/Android
Web应用开发TypeScript使用详解
2022/05/25 Javascript