zoukankan      html  css  js  c++  java
  • python3 第二十四章

    匿名函数指一类无须定义标识符的函数或子程序。Python用lambda语法定义匿名函数,只需用表达式而无需申明。
    lambda语法的定义如下:

    lambda [arg1 [,arg2, ... argN]] : expression

    有些时候,当我们在传入函数时,不需要显式地定义函数,直接传入匿名函数更方便。匿名函数有个限制,就是只能有一个表达式,无需写return,返回值就是该表达式的结果。用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数

    实例:

    # 可写函数说明
    sum = lambda arg1, arg2: arg1 + arg2
    
    # 调用sum函数
    print("相加后的值为 : ", sum(10, 20))
    print("相加后的值为 : ", sum(20, 20))

    以上代码,输出:

    相加后的值为 :  30
    相加后的值为 :  40

    在定义时直接被调用,比如:

    print((lambda x, y: x-y)(3, 4))

     以上代码,输出:

    -1

     但通常都是在定义lambda函数的同时将其应用作为参数传递给另一个函数,该函数在其处理过程中对lambda定义的函数进行调用,例如:

    L = [1, 2, 3, 4, 5, 6, 7, 8]
    
    # 过滤掉所有的偶数
    res = filter(lambda x: x % 2 == 1, L)
    
    print(list(res))

     以上代码,输出:

    [1, 3, 5, 7]

    上面几个实例都是比较简单的,我们再来看几个复杂的。假如,我们要找出两个数中小的那一个,我们可以用lambda这么写:

    fn = lambda x, y: x if x < y else y
    
    print(fn(1, 2))

     以上代码,输出:

    1

    在上面的实例中,函数体里的那种写法,实际上是python中的三元表达式(三目运算符)。在Python中,语法如下:

    为真时的结果 if 判定条件 else 为假时的结果  

     例如:

    1 if 5>3 else 0

    是先输出结果,再判定条件,输出1,如果5大于3,否则输出0

    再来几个更复杂的,后面这几个如果你是初学者,可以略过!

    柯里化(什么是柯里化?https://baike.baidu.com/item/%E6%9F%AF%E9%87%8C%E5%8C%96/10350525?fr=aladdin):

    res = (lambda x: (lambda y: (lambda z: x + y + z)(1))(2))(3)
    
    print(res)

     以上代码,输出:

    6

    递归:

    func = lambda n: 1 if n == 0 else n * func(n-1)
    print(func(5))

     以上代码,输出:

    120

    f = lambda func, n: 1 if n == 0 else n * func(func, n - 1)
    print(f(f, 4))

     以上代码,输出:

    24

     匿名函数有以下几个特点:

    • lambda 只是一个表达式,函数体比 def 简单很多。
    • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
    • lambda 函数拥有自己的命名空间,像嵌套的函数定义,lambda 函数可以从包含它的作用域中引用变量。
  • 相关阅读:
    协成
    java设计模式之中介者模式
    java设计模式之状态模式
    java设计模式之命令模式
    java设计模式之迭代器模式
    java设计模式之模板方法模式
    /ppp profile up-down script 的变量
    iptables常用配置
    站群服务器多IP配置L2TP多出口
    ARCH LINUX 配置DHCPCD 静态IP
  • 原文地址:https://www.cnblogs.com/mrbug/p/8406340.html
Copyright © 2011-2022 走看看