悄悄系列,不当python小白——三步走战法 functools .partial函数用法

有没有人在啊,想请问下,悄悄系列,不当python小白——三步走战法 functools .partial函数用法
最新回答
傷丶如花美眷

2026-10-20 11:16:44

functools.partial 是 Python 中用于固定函数部分参数的工具,通过生成一个新函数实现“分步传参”,简化重复性参数传递。以下是其核心用法和三步走战法:

一、核心作用
  • 偏函数化:将原函数的部分参数提前绑定,生成一个参数数量减少的新函数。
  • 代码复用:避免重复编写相同参数,尤其适用于需要多次调用且部分参数固定的场景。
二、三步走战法1. 导入模块from functools import partial2. 定义原函数

原函数需接受多个参数,例如:

def my_sum(a, b): print("a=", a) print("b=", b) return a + b3. 创建偏函数并调用
  • 固定参数:通过 partial(原函数, 固定参数) 生成新函数。new_my_sum = partial(my_sum, 10) # 固定 a=10
  • 调用新函数:只需传入剩余未固定的参数。res = new_my_sum(20) # 实际调用 my_sum(10, 20)
  • 输出结果:a= 10b= 20res= 30
三、关键细节
  1. 参数绑定顺序

    partial 按位置绑定参数。例如 partial(my_sum, 10) 固定的是第一个参数 a。

    若需固定关键字参数,需显式指定:

    new_my_sum_kw = partial(my_sum, b=10) # 固定 b=10res_kw = new_my_sum_kw(a=20) # 调用 my_sum(20, 10)
  2. 与默认参数的区别

    partial 是运行时动态绑定,而默认参数是函数定义时静态设置。

    偏函数更灵活,可基于不同场景生成多个定制化函数。

  3. 应用场景

    简化重复调用:如固定日志级别、文件路径等。

    from functools import partialimport logginglog = partial(logging.log, level=logging.INFO)log("This is an info message") # 无需每次写 level=logging.INFO

    适配接口:当函数参数与第三方库要求不匹配时,用偏函数调整。

    # 假设某库要求函数接受 (data, axis), 但你的函数是 (axis, data)original_func = lambda axis, data: sum(data) / axisadapted_func = partial(original_func, data=[1, 2, 3])adapted_func(axis=3) # 计算 (1+2+3)/3
四、常见误区
  • 混淆参数顺序:若原函数参数较多,易误绑非目标参数。建议用关键字参数固定:new_func = partial(my_sum, b=10) # 更清晰
  • 过度使用:简单场景直接传参更直观,偏函数适合参数固定且复用率高的场景。
五、扩展:partialmethod

若需在类方法中固定参数,可用 functools.partialmethod:

from functools import partialmethodclass Calculator: def add(self, a, b): return a + b # 固定 a=10 的方法 add_ten = partialmethod(add, 10)calc = Calculator()print(calc.add_ten(5)) # 输出 15 (相当于 add(10, 5))

通过三步走战法,可高效掌握 functools.partial 的用法,告别重复传参,提升代码简洁性。