zoukankan      html  css  js  c++  java
  • Python的匿名函数使用进阶

    1.背景

    python中函数应用一方面是将重复使用的代码块抽象为一个函数从而降低代码的冗余度,即通过入参,返回值完成函数的调用并完成一定功能,另一方面是将复杂的代码块使用函数来封装,从而提高程序的可读性。

    评定代码质量的一个指标就是clean code,随着python语言的发展,发现函数通过使用def定义来实现,有些时候显得费事,就出现了匿名函数即lambda的使用,普通函数是一种过程式编程,lambda则是一种函数式编程,那么什么是函数式编程,下面让我婉婉道来:

    实现两个数值之和的函数的方法:

     1 #!/usr/bin/python  
     2 # encoding: utf-8  
     3       
     4 
     5 def sum(a,b):
     6     c=a+b
     7     return c
     8 
     9 if __name__=="__main__":
    10     print sum(2,4)


    a=lambda x,y: x+y
        print a(1,2) #使用匿名函数的实现方法

    你觉得那种方法看起更专业?

    但是展现匿名函数"神奇"的地方是结合filter,map和reduce的使用

    需求案例:

    当你需要从一个列表里面检索出满足一定条件的元素

    1 #!/usr/bin/python  
    2 # encoding: utf-8  
    3       
    4 
    5 if __name__=="__main__":
    6     data=[1,2,4,67,85,34,45,100,456,34]
    7     print filter(lambda x:x%3==0,data)

    上面的例子就是找出这个列表中能被3整除的元素

    结果:

    [45, 456]

    x 为lambda函数的一个入参

    :为分隔符

    x%3==0 为lambda函数的返回值,同时作为filter函数的入参,如果为真就将该元素加入返回列表中

    data就是传入的源数据列表

    匿名函数的调用
    赋值给一个变量,然后如调用函数一样调用就是了
    1 #!/usr/bin/python  
    2 # encoding: utf-8  
    3       
    4 
    5 if __name__=="__main__":
    6     c = lambda x,y=5: x+y
    7     print c(2)
    8     print c(2,4)

    可使用默认值,如果有传入的参数值当然是要传入的值了

    输出结果:

    7
    6

    1 #!/usr/bin/python  
    2 # encoding: utf-8  
    3       
    4 
    5 if __name__=="__main__":
    6     c = lambda *z:z
    7     print c(2)
    8     print c("ni","hao")

    输出结果:

    (2,)
    ('ni', 'hao')  # 以*z的形式传入参数,返回结果是元组

    #!/usr/bin/python  
    # encoding: utf-8  
          
    
    if __name__=="__main__":
        data=[1,2,3,4,5,6,7,8,9,10]
        print reduce(lambda x,y:x+y,data)

    上面的例子是lambda和reduce联合使用实现累加的功能

  • 相关阅读:
    Yii2的深入学习--行为Behavior
    使用WordPress搭建自己的博客
    php-resque的设计和使用
    PHP的学习--在Atom中使用XDebug(Mac)
    七牛镜像的使用
    macOS平台下虚拟摄像头的研发总结
    macOS下利用dSYM文件将crash文件中的内存地址转换为可读符号
    XCode日常使用备忘录
    DirectShow Filter的开发实践
    Windows下程序启动时出现0xc000007b错误的解决方案
  • 原文地址:https://www.cnblogs.com/wc554303896/p/7710974.html
Copyright © 2011-2022 走看看