Python入门篇-匿名函数
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.匿名函数概述
1>.什么是匿名函数
匿名,即没有名字
匿名函数,即没有名字的函数
2>.匿名函数编写格式
Python借助Lambda表达式构建匿名函数
匿名函数格式如下:
lambda 参数列表:表达式
3>.匿名函数注意事项
(1)使用lambda关键字来定义匿名函数 (2)参数列表不需要小括号 (3)冒号是用来分割参数列表和表达式的 (4)不需要使用return,表达式的值,就是匿名函数返回值 (5)lambda表达式(匿名函数)只能写在一行上,被称为单行函数 (6)匿名函数用途:在高阶函数传参时,使用lambda表达式,往往能简化代码
二.匿名函数定义
1>.匿名函数的定义和调用
#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:[email protected] l1 = lambda x : x ** 2 #使用lambda关键字定义匿名函数,我们可以给它复制给一个变量 res = l1(5) #调用匿名函数 print(res) print((lambda x:x **2)(5)) #当然,上面3行代码我们可以写成一行哟~ #以上代码执行结果如下:
25
25
2>.不推荐使用的匿名函数案例
#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:[email protected] foo = lambda x,y :(x + y) ** 2 #定义一个匿名函数,我们给它复制给一个变量,其实我们并不推荐这样使用 print("foo:{}".format(foo(10,20))) #调用我们定义的匿名函数 def bar(x,y): #我们不推荐使用上面的方法,而是建议使用普通函数定义比价复杂的功能
return (x + y) ** 2 print("bar:{}".format(bar(10,20))) #以上代码执行结果如下:
foo:900
bar:900
3>.一些简单的匿名函数案例
#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
#EMAIL:[email protected] print((lambda :0)()) print((lambda x, y=3: x + y)(5)) print((lambda x, y=3: x + y)(5, 6)) print((lambda x, *, y=30: x + y)(5)) print((lambda x, *, y=30: x + y)(5, y=10)) print((lambda *args: (x for x in args))(*range(5))) print((lambda *args: [x+1 for x in args])(*range(5))) print((lambda *args: {x+2 for x in args})(*range(5))) print([x for x in (lambda *args: map(lambda x: x+1, args))(*range(5))]) print([x for x in (lambda *args: map(lambda x: (x+1,args), args))(*range(5))]) #以上代码执行结果如下:
0
8
11
35
15
<generator object <lambda>.<locals>.<genexpr> at 0x000000000221D5C8>
[1, 2, 3, 4, 5]
{2, 3, 4, 5, 6}
[1, 2, 3, 4, 5]
[(1, (0, 1, 2, 3, 4)), (2, (0, 1, 2, 3, 4)), (3, (0, 1, 2, 3, 4)), (4, (0, 1, 2, 3, 4)), (5, (0, 1, 2, 3, 4))]
3>.匿名函数使用案例
#!/usr/bin/env python
#_*_conding:utf-8_*_
#@author :yinzhengjie
#blog:http://www.cnblogs.com/yinzhengjie from collections import defaultdict d = defaultdict(lambda :0) for k in 'abcd':
for j in range(3):
d[k] += 1 print(d)
print(d.keys())
print(d.values()) #以上代码输出结果如下:
defaultdict(<function <lambda> at 0x000001BD1A39D948>, {'a': 3, 'b': 3, 'c': 3, 'd': 3})
dict_keys(['a', 'b', 'c', 'd'])
dict_values([3, 3, 3, 3])