zoukankan      html  css  js  c++  java
  • Python入门篇-匿名函数

                  Python入门篇-匿名函数

                                          作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

    一.匿名函数概述

    1>.什么是匿名函数

      匿名,即没有名字
      
      匿名函数,即没有名字的函数

    2>.匿名函数编写格式

      Python借助Lambda表达式构建匿名函数
    
      匿名函数格式如下:     
    lambda 参数列表:表达式

    3>.匿名函数注意事项

    (1)使用lambda关键字来定义匿名函数
    
    (2)参数列表不需要小括号
    
    (3)冒号是用来分割参数列表和表达式的
    
    (4)不需要使用return,表达式的值,就是匿名函数返回值
    
    (5)lambda表达式(匿名函数)只能写在一行上,被称为单行函数
    
    (6)匿名函数用途:在高阶函数传参时,使用lambda表达式,往往能简化代码

    二.匿名函数定义

    1>.匿名函数的定义和调用

     1 #!/usr/bin/env python
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #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/
     5 #EMAIL:y1053419035@qq.com
     6 
     7 
     8 l1 = lambda x : x ** 2          #使用lambda关键字定义匿名函数,我们可以给它复制给一个变量
     9 
    10 res = l1(5)                     #调用匿名函数
    11 
    12 print(res)
    13 
    14 print((lambda x:x **2)(5))      #当然,上面3行代码我们可以写成一行哟~
    15 
    16 
    17 
    18 #以上代码执行结果如下:
    19 25
    20 25

    2>.不推荐使用的匿名函数案例

     1 #!/usr/bin/env python
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #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/
     5 #EMAIL:y1053419035@qq.com
     6 
     7 foo = lambda x,y :(x + y) ** 2      #定义一个匿名函数,我们给它复制给一个变量,其实我们并不推荐这样使用
     8 
     9 print("foo:{}".format(foo(10,20)))  #调用我们定义的匿名函数
    10 
    11 
    12 def bar(x,y):                       #我们不推荐使用上面的方法,而是建议使用普通函数定义比价复杂的功能
    13     return (x + y) ** 2
    14 
    15 print("bar:{}".format(bar(10,20)))
    16 
    17 
    18 #以上代码执行结果如下:
    19 foo:900
    20 bar:900

    3>.一些简单的匿名函数案例

     1 #!/usr/bin/env python
     2 #_*_coding:utf-8_*_
     3 #@author :yinzhengjie
     4 #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/
     5 #EMAIL:y1053419035@qq.com
     6 
     7 print((lambda :0)())
     8 
     9 print((lambda x, y=3: x + y)(5))
    10 
    11 print((lambda x, y=3: x + y)(5, 6))
    12 
    13 print((lambda x, *, y=30: x + y)(5))
    14 
    15 print((lambda x, *, y=30: x + y)(5, y=10))
    16 
    17 print((lambda *args: (x for x in args))(*range(5)))
    18 
    19 print((lambda *args: [x+1 for x in args])(*range(5)))
    20 
    21 print((lambda *args: {x+2 for x in args})(*range(5)))
    22 
    23 print([x for x in (lambda *args: map(lambda x: x+1, args))(*range(5))])
    24 
    25 print([x for x in (lambda *args: map(lambda x: (x+1,args), args))(*range(5))])
    26 
    27 
    28 
    29 #以上代码执行结果如下:
    30 0
    31 8
    32 11
    33 35
    34 15
    35 <generator object <lambda>.<locals>.<genexpr> at 0x000000000221D5C8>
    36 [1, 2, 3, 4, 5]
    37 {2, 3, 4, 5, 6}
    38 [1, 2, 3, 4, 5]
    39 [(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>.匿名函数使用案例

     1 #!/usr/bin/env python
     2 #_*_conding:utf-8_*_
     3 #@author :yinzhengjie
     4 #blog:http://www.cnblogs.com/yinzhengjie
     5 
     6 
     7 from collections import  defaultdict
     8 
     9 d = defaultdict(lambda :0)
    10 
    11 for k in 'abcd':
    12     for j in range(3):
    13         d[k] += 1
    14 
    15 print(d)
    16 print(d.keys())
    17 print(d.values())
    18 
    19 
    20 
    21 #以上代码输出结果如下:
    22 defaultdict(<function <lambda> at 0x000001BD1A39D948>, {'a': 3, 'b': 3, 'c': 3, 'd': 3})
    23 dict_keys(['a', 'b', 'c', 'd'])
    24 dict_values([3, 3, 3, 3])
  • 相关阅读:
    asp.net图片上传代码
    C#(同步调用、异步调用、异步回调)
    跨线程的控件调用
    C# ListView用法详解 很完整
    获取dataGridView双击时判断双击的是下面的行,还是列头
    加密解密类
    C# 中DataGridView 绑定List<T>做数据源的操作问题
    C#获取当前程序集的完整路径
    接口测试-小结
    接口测试用例
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/10961825.html
Copyright © 2011-2022 走看看