在项目中遇到过这样的代码:
filter_pred = partial(
filter_len, # 这是个函数
source_min_length=kwargs.get('source_min_length', 1),
source_max_length=kwargs.get('source_max_length', float('inf')),
target_min_length=kwargs.get('target_min_length', 1),
target_max_length=kwargs.get('target_max_length', float('inf')),
)
总搞不明白partial的用途,下面用一个简单的例子解释:
from functools import partial
def add(a, b):
return a + b
rst1 = add(4, 2) # 给add函数赋两个参数
plus3 = partial(add, 3) # 先赋值一个参数
plus5 = partial(add, 5)
rst2 = plus3(4) # 再赋值另一个参数
rst4 = plus5(10)
print(rst1, ' ', rst2, ' ', rst4)
# 6 7 15
解释:一般函数在执行时,需要带上必要的参数调用,但有时参数可以在函数被调用之前提前获知,此时,一个函数有一个或多个参数预先就可以用上,以便函数能用更少的参数进行调用。partial函数就可以实现这样的功能,在使用partial函数前必须调用functools模块。相当于在partial函数里已经指定了一个参数,其余参数在调用函数时再调用就可以了。