pythonlambda函数排序_详解Python的Lambda函数与排序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
def toString(self):
return 'Age:'+str(self.age)+'\tGender:'+der
List=[People(21,'male'),People(20,'famale'),People(34,'male'),People(19,'famale')]
print 'Befor sort:'
for p in List:
String()
List.sort(lambda p1,p2:cmp(p1.age,p2.age))
print '\nAfter ascending sort:'
for p in List:
String()
List.sort(lambda p1,p2:-cmp(p1.age,p2.age))
print '\nAfter descending sort:'
for p in List:
String()
上⾯的代码定义了⼀个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
sort命令排序Age:19 Gender:famale
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持脚本之家。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论