• python函数编程-偏函数partial function


    一般的,通过设定函数参数的默认值,可以减低函数调用的难度。比如:int()函数可以把字符串转换成整数:

    >>> int('123')
    123

    事实上,int()函数还提供额外的base参数,表示进制,只是默认值是10而已:

    >>> int('123',base=16)
    291
    >>> int('123',16)
    291

    现在,如果我们需要转换大量的二进制字符串,每次都调用int(x,base=2)显得比较麻烦。这时我们可以尝试封装函数int(x,base=2)成为int2(x),而int2(x)相当于:

    >>> def int2(x,base=2):
    ...     return int(x,base)
    ...
    >>> int2('1000111')
    71

    在python的functools模块中就内置了partial函数,用于把函数的某些参数固定住(也就是设置默认值),最后返回一个新函数。这就是偏函数(和数学中的偏函数的意义不同)。上述例子可以使用偏函数改写为:

    >>> import functools
    >>> int2 = functools.partial(int,base=2)
    >>> int2('110011')
    51

    其实,上面新的int2函数,仅仅是把base参数的默认值由原来的10变为2。我们还是可以在函数调用的时候传入其他的值:

    >>> int2('110011',base = 10)
    110011

    创建偏函数的时候,可以接收3种类型的参数:函数、*args、**kw:

    当写成:

     int2 = functools.partial(int,base=2)

    int2('110011')

    执行的结果相当于:

    kw = { 'base': 2 }
    int('10010', **kw)

    当写成:

    >>> max2 = functools.partial(max,5)
    >>> max2(3,6)  
    6

    相当于:

    args = (10, 5, 6, 7)
    max(*args)

    可见,如果一个函数的参数个数太多,需要简化的时候,使用functools.partial函数,可以创建一个函数,这个新函数可以将原函数的部分参数初始化(即赋默认值),调用的时候更简单

  • 相关阅读:
    Linux libcurl使用 (收藏)
    公钥和私钥与认证和签名
    fedora下配置ipv6 dns服务器
    SHA1
    linux IP 命令
    SSL/TLS协议簇加解密流程
    MD5算法实现原理
    container_of深入理解
    diff和patch使用指南
    oracle 笔记
  • 原文地址:https://www.cnblogs.com/hiwuchong/p/8138386.html
Copyright © 2020-2023  润新知