Python 偏函数(from functools import partial)

引入偏函数包: 

from functools import partial

前言

partial是Python functools 模块中的一个高阶函数。 它对普通函数进行封装, 主要功能是把一个函数的部分参数给固定住,返回一个新的函数。通俗点说, 就是冻结原函数的某些参数。:

一句话解释:“把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单(调用新函数的时候不需要输入默认的参数了就)“

基础使用: 

例如:

import functools
 
def add(a, b):
    return a + b
add(4, 2)
6
 
plus3 = functools.partial(add, 3)
plus5 = functools.partial(add, 5)
plus3(4)
7
plus3(7)
10
plus5(10)
15

预先指定某些默认值

什么时候使用?

场景一:

你有一个被其他python代码使用的callable对象,可能是一个回调函数或者是一个处理器, 但是它的参数太多了,导致调用时出错

def spam(a, b, c, d):
    print(a, b, c, d)
>>> from functools import partial
>>> s1 = partial(spam, 1) # a = 1
>>> s1(2, 3, 4)
1 2 3 4
>>> s1(4, 5, 6)
1 4 5 6
>>> s2 = partial(spam, d=42) # d = 42
>>> s2(1, 2, 3)
1 2 3 42
>>> s2(4, 5, 5)
4 5 5 42
>>> s3 = partial(spam, 1, 2, d=42) # a = 1, b = 2, d = 42
>>> s3(3)
1 2 3 42
>>> s3(4)
1 2 4 42
>>> s3(5)
1 2 5 42

场景二:

初次用这个函数, 可能都会有一些疑问, 直接调原函数然后给原函数的参数一些默认参数值就好了, 为什么搞这么复杂?

举个简单的例子, 可能就更好理解了。例如, 你实现了一个乘法函数, 实现2个数相乘:

def mul(x, y):
    return x*y 
最原始的直接调用函数然后输入值的方法

计算1x2,mul(1,2)
计算4x2,mul(4,2)

你可能已经发现了, 这样写显得比较重复。

给默认值的方法

给y赋个默认值就可以避免重复。

def mul(x, y=2):
    return x*y 

计算1x2,mul(1)
计算4x2,mul(4)

弊端:但是这样也有个问题, 假设y值变了, 就要修改原函数的默认值,如果有多个需要默认值的情况就只能用“最原始的直接调用函数然后输入值的方法了”。

使用partial函数就可以解决以上问题
mul2 = partial(mul, y=2)

计算1x2,mul2(1)
计算4x2,mul2(4)

假设y初始值变为3, 只需要通过partial生成一个新的函数就好了。

mul3 = partial(mul, y=3)

python中partial函数的作用_leo0308的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/weixin_43135178/article/details/131647079
今日推荐