Python中的偏函数
Partial 偏函数
概念
不同于数学中的偏函数, 这里的偏函数实则是Python中functools模块为我们提供的功能之一, 可能单看名字很多人不解其意, 但是用一句通俗的话来说:'偏函数实则就是一个辅助函数。它是一个很有用的功能, 这需要被记住。
先观其源码
################################################################################
### partial() argument application
################################################################################
# Purely functional, no descriptor behaviour
class partial:
"""New function with partial application of the given arguments
and keywords.
"""
__slots__ = "func", "args", "keywords", "__dict__", "__weakref__"
def __new__(cls, func, /, *args, **keywords):
....
先不管/
, 可以看出来它接收三个参数, func
、*args
以及 **keywords
(关键字参数)。
- func: 指的是一个函数, 这个函数可以是自定义的, 也可以是Python内置的函数。
- *args: 指的是一个可变参数, 例如被调用函数的参数, 是可变的
min(1, 2, 3)
。 - **keywords: 指的是一个关键字参数, 具体看实际应用场景。
说了这么多不如看实际操作来的舒服, 来的通透。
应用示例
这里我们定义一个计算列表对象长度的函数
def list_len(obj, multiple=None):
if type(obj) != list:
return None
obj_len = len(obj) * 10
if multiple and type(multiple) == int:
obj_len = len(obj) * multiple
return obj_len
后面我们使用偏函数对其应用
from functools import partial
def list_len(obj, multiple=None):
...
get_len = partial(list_len, [1, 2, 3])
print(get_len())
############### 结果 ###############
>>> 30
是不是有点多此一举, 这里只在证明, partial所接受的第一个参数func及第二个参数可变参数在我们给到后, 偏导数可使用, 再去看看第三个参数关键字参数的使用。
from functools import partial
def list_len(obj, multiple=None):
...
get_len = partial(list_len, [1, 2, 3], multiple=2)
print(get_len())
############### 结果 ###############
>>> 6
from functools import partial
def list_len(obj, multiple=None):
...
get_len = partial(list_len, multiple=2)
print(get_len([1, 2, 3]))
############### 结果 ###############
>>> 6
显而易见, 一切尽在不言中, 若是参数需要是定值时是不是省去了写重复代码的时间呢? 需要好好悟一悟哦~