详解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网页解析利器BeautifulSoup安装使用介绍
Mar 17 Python
Python中的map()函数和reduce()函数的用法
Apr 27 Python
python PyTorch预训练示例
Feb 11 Python
漂亮的Django Markdown富文本app插件的实现
Jan 02 Python
详解python之heapq模块及排序操作
Apr 04 Python
Apache,wsgi,django 程序部署配置方法详解
Jul 01 Python
python序列化与数据持久化实例详解
Dec 20 Python
python3下pygame如何实现显示中文
Jan 11 Python
以SQLite和PySqlite为例来学习Python DB API
Feb 05 Python
Selenium及python实现滚动操作多种方法
Jul 21 Python
python实现xml转json文件的示例代码
Dec 30 Python
教你怎么用Python实现多路径迷宫
Apr 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
使用MaxMind 根据IP地址对访问者定位
2006/10/09 PHP
PHP数组传递是值传递而非引用传递概念纠正
2013/01/31 PHP
使用PHP遍历文件目录与清除目录中文件的实现详解
2013/06/24 PHP
探究Laravel使用env函数读取环境变量为null的问题
2016/12/06 PHP
PHPMailer发送邮件
2016/12/28 PHP
有关于eclipse配置spket需要注意的一些地方
2013/04/07 Javascript
javascript中parseInt()函数的定义和用法分析
2014/12/20 Javascript
详细解密jsonp跨域请求
2015/04/15 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
2016/09/09 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
2016/11/21 Javascript
jQuery实现高级检索功能
2019/05/28 jQuery
JS面向对象之单选框实现
2020/01/17 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
Bootstrap FileInput实现图片上传功能
2021/01/28 Javascript
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
Python中集合的内建函数和内建方法学习教程
2015/08/19 Python
浅析Python编写函数装饰器
2016/03/18 Python
Python实现Logger打印功能的方法详解
2017/09/01 Python
Python学习笔记之Django创建第一个数据库模型的方法
2019/08/07 Python
Python实现Restful API的例子
2019/08/31 Python
在python中计算ssim的方法(与Matlab结果一致)
2019/12/19 Python
python__new__内置静态方法使用解析
2020/01/07 Python
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
享誉全球的多元化时尚精品购物平台:Farfetch发发奇(支持中文)
2017/08/08 全球购物
印尼最大的婴儿用品购物网站:Orami
2017/09/28 全球购物
德国拖鞋网站:German Slippers
2019/11/08 全球购物
销售代表求职自荐信
2013/10/01 职场文书
领导干部培训感言
2014/01/23 职场文书
《与朱元思书》的教学反思
2014/04/17 职场文书
医学检验专业自荐信
2014/09/18 职场文书
党支部三严三实对照检查材料思想汇报
2014/09/29 职场文书
党的群众路线教育实践活动先进个人材料
2014/12/24 职场文书
2015年医德医风工作总结
2015/04/02 职场文书
javascript的var与let,const之间的区别详解
2022/02/18 Javascript
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列的问题
2022/03/16 Redis
vue cli4中mockjs在dev环境和build环境的配置详情
2022/04/06 Vue.js