• python之有关匿名函数和偏函数的定义,优点,以及使用方法


    匿名函数(lambda)的定义:

    在python中,不用通过def来声明函数名字,而是通过lambda关键字来定义的函数称为匿名函数,lambda函数能接收任何数量的参数,但只能返回一个表达式的值,该变量就成了一个函数对象。

    语法:lambda 参数:表达式(多个参数中间用逗号连接)

    使用lambda函数的优点:

    可以省去函数的定义,不需要像其他函数一样西先声明再使用,而可以在写函数的同时直接使用函数。

    使用场景:

    1.需要将一个函数对象作为参数来传递时,可以直接定义一个lambda函数(作为函数的参数或返回值)
    举例:

    def test(a,b,opt): #opt当做参数传递
        print(a)
        print(b)
        print(opt(1,8))
    test(10,100,lambda x,y:x+y)#匿名函数作为参数
    
    • 1
    • 2
    • 3
    • 4
    • 5
    10
    100
    9
    
    • 1
    • 2
    • 3

    2.要解决的问题符合lambda函数的情况(任意多个参数和一个返回值),并且只有一个地方会使用这个函数,不会在其他地方重用,可以使用lambda函数
    举例:

    def add(m,n):#普通函数实现两数相加
        return m + n
    print(add(1,9))
    result = lambda m,n:m+n#匿名函数实现两数相加
    print(result(1,9))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    10
    10
    
    • 1
    • 2

    3.与一些Python的内置函数配合使用,提高代码的可读性
    举例:

    stus = [
        {"name":"zhangsan","age":28},
        {"name":"wangwu","age":20},
        {"name":"laowang","age":35}]
    print("排列之前的顺序:")
    print(stus)
    print('根据名称:')
    stus.sort(key=lambda m:m['name'])
    print(stus)
    print("根据年龄:")
    stus.sort(key=lambda g:g['age'])
    print(stus)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    排列之前的顺序:
    [{'name': 'zhangsan', 'age': 28}, {'name': 'wangwu', 'age': 20}, {'name': 'laowang', 'age': 35}]
    根据名称:
    [{'name': 'laowang', 'age': 35}, {'name': 'wangwu', 'age': 20}, {'name': 'zhangsan', 'age': 28}]
    根据年龄:
    [{'name': 'wangwu', 'age': 20}, {'name': 'zhangsan', 'age': 28}, {'name': 'laowang', 'age': 35}]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    偏函数的定义:

    在python中,如果在设置某个函数的时候,需要把函数的某个参数设置为固定的值,就可以使用偏函数来实现。

    使用偏函数的好处:

    将函数里面部分参数固定起来(默认值),后面再进行调用,简化函数的调用

    偏函数实现:

    1:import functools
    2:from functools import partial(只导入了偏函数的库),partial(函数名称,参数=固定值)

    例一:求两个数之和

    from functools import partial
    def add(a,b):
        return a + b
    z=add(9,100)#普通函数调用
    print(z)
    a = partial(add,b=100) #偏函数调用,将b设置为固定的值,通过a参数绑定partial(add,100)返回一个新的函数,再调用执行
    res = a(9)
    print(res)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    109
    109
    
    • 1
    • 2

    例二:求数字1010的二进制值是多少

    from functools import partial
    print(int('1010',base = 2))#直接转化,int(字符串或者整形,进制数) 不写默认十进制
    def int2(str,base):#通过定义函数实现
        return int(str,base)
    print(int2('1111',base=2))#调用函数
    res = partial(int2,base=2)#通过使用偏函数,将进制设为预先可知变量
    print(res('1111'))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    10
    15
    15
    
    • 1
    • 2
    • 3
  • 相关阅读:
    LeetCode 0179. 最大数
    1591 - Data Mining (UVA)
    数学建模笔记(四):初等模型
    Excel文件转换为HTML文件
    Java基础:通过Callable创建多线程
    【强烈推荐】视频转gif、图片拼gif,嘎嘎好用,免费免费真的免费,亲测有效,无效过来打我
    SSM框架基于web的房屋租售管理系统源码
    基于MATLAB的指纹识别算法仿真实现
    找回消失的密钥 --- DFA分析白盒AES算法
    [网络安全] PKI
  • 原文地址:https://blog.csdn.net/m0_64365419/article/details/125610258