[关闭]
@yanglt7 2018-12-03T03:56:01.000000Z 字数 755 阅读 622

Python15_偏函数

Python


通过设定参数的默认值,可以降低函数调用的难度。而偏函数也可以做到这一点。举例如下:

int() 函数可以把字符串转换为整数,当仅传入字符串时,int() 函数默认按十进制转换:

  1. >>> int('12345')
  2. 12345

但 int() 函数还提供额外的 base 参数,默认值为 10。如果传入 base 参数,就可以做 N 进制的转换:

  1. >>> int('12345',base=8)
  2. 5349
  3. >>> int('12345',base=16)
  4. 74565

可以定义一个 int2() 的函数,默认把 base=2 传进去:

  1. >>> def int2(x,base=2):
  2. ... return int(x,base)
  3. ...
  4. >>> int2('10000000')
  5. 128

简单总结 functools.partial 的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。

注意到上面的新的 int2 函数,仅仅是把 base 参数重新设定默认值为 2,但也可以在函数调用时传入其他值:

  1. >>> int2('100000000',base=10)
  2. 100000000

最后,创建偏函数时,实际上可以接收函数对象、*args 和 **kw 这 3 个参数,当传入:

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

实际上固定了 int() 函数的关键字参数 base,也就是:

  1. int2('10100')

相当于:

  1. kw={'base':2}
  2. int('10100',**kw)

当传入:

  1. max2 = functools.partial(max,10)

实际上会把 10 作为 *args 的一部分自动加到左边,也就是:

  1. max2(5,6,7)

相当于:

  1. args=(10,5,6,7)
  2. max(*args)

结果为 10。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注