python偏函数是一个很有用的函数方法,掌握后,绝对对于以后打码过程能剩下很多麻烦事
在调用函数时,有时你想要固定其中的一两个函数,但如果没有偏函数来固定其中的函数参数,你每一次调用都要输出函数要求的所有参数,这样很麻烦
python偏函数的作用:
可以将一个或多个参数预先赋值,以便函数能用更少的参数进行调用。
python偏函数的使用:
def mod( n, m ):
return n % m
mod1 = partial( mod, 100 )
print mod( 100, 7 ) # 2
print mod1( 7 ) # 2
从这个例子可以知道,运用偏函数可以将我们mod函数的第一个参数固定。
注意:不是说在mod1=partial(mod,100)中100是在函数参数的第二个位置,就认为它固定了第二个参数
import functools
int2 = functools.partial(int, base=2)
nt2(‘1000000‘)
64
nt2(‘1010101‘)
85
可以更改base的值,就是更改了默认值
>>> int2(‘1000000‘, base=10)
1000000
注意:
这里在创建新的偏函数后,依旧可以更改已经设置的默认值,但是必须清晰指出是更改了 base 的值。
否则如果直接传如一个数值会报错:
比如你改成
int2(‘1000000‘,10)这是错误的,你没有明确指出base要改成10,应该得完整写出来int2(‘1000000‘,base=10)原因:创建偏函数时,实际上可以接收函数对象、*args 和 **kw 这 3 个参数,当传入:
int2 =functools.partial(int, base=2)
int 是函数对象,base=2 是 **kw,没有传入 *args 参数
实际上固定了 int() 函数的关键字参数 base,也就是:
int2(‘10010‘)
相当于:
kw = { ‘base‘: 2 }
int(‘10010‘, **kw) # 如果不指明 base=2 而只是传入 2 的话,那么 2 被认为是 *args 的值
当传入:
max2 =functools.partial(max, 10) # 这里的 10 显然就是作为 *args 里的值传入的
实际上会把 10 作为 *args 的一部分自动加到参数列表里去,也就是:
max2(5,6, 7) # 原本有 *args 的列表,然后会把 10 再加进去
相当于:
args = (10, 5, 6, 7)
max(*args)
原文:https://www.cnblogs.com/lsl30522/p/10906080.html