Python3.+匿名函数
2017-10-24 本文已影响35人
__Y_Q
1.匿名函数
Python中使用 lambda 表达式来创建匿名函数
1.1关于 lambda表达式的说明
- lambda 是一个表达式,而不是一个代码块,仅仅能在 lambda 表达式中封装有限的逻辑
- lambda 函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数
1.2关于 lambda表达式的语法
使用 lambda 关键字 后面是参数列表 :表达式
lambda 默认是有返回值的
如下:
lambda 参数列表 : 表达式 默认 return
1.3 例子:
-
1.3.1例子1:
lambda a,b : a + b
这就是个简单的 lambda 表达式 传入参数 a,b, 然后进行运算,返回 a + b 的值
num = lambda a,b : a + b
print(num(1,2)) #结果输出3
有点基础的应该都会明白是什么意思
-
1.3.1例子2
再来深入一点,分析下面的代码
def operation(a,b,opt): #把 lambda 当参数传入
result = opt(a,b)
return result
result = operation(10,10,lambda a,b : a + b)
print(result)
这里有一个自定义函数,operation,接收3个参数, a,b,opt,然后看调用的地方传入的值,10 对应 a ,后面的10对应 b ,最后是一个 lambda 表达式,对应最后的 opt,这里是把 lambda 当成了一个参数传入了自定义的operation函数内,在operation 里面把接收到的两个10,再传入 opt 也就是 lambda中 最后返回运算出来的结果
-
1.3.3例子3
下面来个进阶
students = [
{'name':'zhangsan','age':17},
{'name':'lisi','age':19},
{'name':'wanger','age':15}
]
有这样一个列表,列表中的每个元素是一个字典,我想对 age 进行排序,然后输出,如果单独写一个函数的话其实也是能实现的,不过用 lambda 的话就会更简洁与方便
students.sort(key = lambda x : x['age'])
print(students)
输出结果
[{'name': 'wanger', 'age': 15}, {'name': 'zhangsan', 'age': 17}, {'name': 'lisi', 'age': 19}]
关于'key'
从python2.4开始,list.sort()和sorted()函数增加了key参数来指定一个函数,此函数将在每个元素比较前被调用
key参数的值为一个函数,此函数只有x一个参数,且返回age的值用来进行比较
也就是说在 sort的时候,第一次获取第一个元素,然后当做参数传入到 key 指定的函数里, 在key 指定的函数里,获取第一个元素里面的 age的值,并返回, 然后,再获取第二个元素,第三个元素,.....全部获取完之后,再进行排序,
是不是有点晕,一开始我也很晕,慢慢试着理解一下.就会容易接受了
可能我的理解也有不对的地方,若有大神看到请及时指点小弟,免得一直走歪路