Python——偏函数 Partial

Python的functools模块提供了partial函数,用于创建偏函数,预先设定函数的部分参数。偏函数可以减少重复代码,提高代码可读性。在示例中,我们定义了一个计算列表长度的函数list_len,并通过partial创建了不同版本的偏函数,固定了部分参数,如对象列表和乘数,展示了如何使用偏函数来简化调用。
摘要由CSDN通过智能技术生成

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

显而易见, 一切尽在不言中, 若是参数需要是定值时是不是省去了写重复代码的时间呢? 需要好好悟一悟哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值