zoukankan      html  css  js  c++  java
  • 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函数,可以创建一个函数,这个新函数可以将原函数的部分参数初始化(即赋默认值),调用的时候更简单

  • 相关阅读:
    sql语句中的通配符
    Q&A 20090922
    Web大文件上传
    作别2010, 迎来2011的第一个工作日
    .Net 中 获取当前应用程序启动目录的几个方法
    asp.net身份验证和使用Silverlight的问题
    常用正则表达式
    最完美的xslt数值函数与字符串函数
    SQL2005的分页存储过程,支持多表多关联,亲测高效绝对可用
    处理大并发下的dropdownlist数据关联
  • 原文地址:https://www.cnblogs.com/hiwuchong/p/8138386.html
Copyright © 2011-2022 走看看