当函数的参数个数太多,需要简化时,可以用偏函数
from functools import partial
def add_sum(*args):
s = 0
for n in args:
s = s + n
return s
# 偏函数的第二个部分(可变参数),也就是10,按原有的函数的参数顺序进行补充,参数将作用在原函数上
# 最后偏函数返回了一个新函数
sum_add_10 = partial(add_sum, 10)
print(sum_add_10(1, 2))
print('A____________我们看下原函数add_sum的函数地址入口:')
print(add_sum)
print('B______我们看下partial函数返回函数的地址入口:')
print(partial(add_sum, 10))
结果:
13
A____________我们看下原函数add_sum的函数地址入口:
<function add_sum at 0x00000209F7184620>
B______我们看下partial函数返回函数的地址入口:
functools.partial(<function add_sum at 0x00000209F7184620>, 10)
可以看出,我们针对add_sum函数的求和结果,再加上10,或者加10加20,甚至加更多,都是可以通过偏函数来实现的,注意偏函数的第二部分,参数是可变的,是按顺序走的,因此,偏函数产生的新函数,sum_add_10 实际上等同于add_sum(10,*args)
import functools
int2 = functools.partial(int, base=2)
# 调用
int2('10010') # 二进制
# 等于
kw = {'base': 2}
int('10010', **kw) # 关键字参数
max2 = functools.partial(max, 10)
# 调用
max2(5, 6, 7)
# 等于
args = (10, 5, 6, 7) # 把10作为*args的一部分自动加到左边
max(*args) # 可变参数
网友评论