在Python开发中,functools.partial是非常实用的工具,它可以固定一个函数的部分参数,生成一个新的可调用对象,在一些需要传递固定参数函数的场景中经常用到。但有时候我们需要确认partial对象内部封装的原始函数是什么,比如调试时定位函数来源,或者验证partial对象的生成逻辑是否正确。

functools.partial对象的核心属性
functools.partial生成的对象是functools.PartialType类型的实例,这个类型内置了三个公开属性,其中func属性就是用来存储内部封装的原始函数的,另外两个属性分别是args和keywords,分别存储预先固定的位置参数和关键字参数。
查看原始函数的具体方法
只需要访问partial对象的func属性,就可以直接获取到内部封装的原始函数,来看一个简单的示例:
from functools import partial
# 定义一个原始函数
def add(a, b, c):
return a + b + c
# 生成partial对象,固定第一个参数为1
add_partial = partial(add, 1)
# 查看原始函数
print(add_partial.func) # 输出: <function add at 0x0000023B7F8C3E20>
# 验证func属性就是原始函数
print(add_partial.func is add) # 输出: True
# 调用原始函数验证
print(add_partial.func(2, 3, 4)) # 输出: 9其他常用属性说明
除了func属性,另外两个属性在实际开发中也很有用,我们可以通过下面的示例了解它们的用法:
from functools import partial
def multiply(x, y, z, scale=1):
return (x * y * z) * scale
# 生成partial对象,固定位置参数2,关键字参数scale=2
multiply_partial = partial(multiply, 2, scale=2)
# 查看预先固定的位置参数
print(multiply_partial.args) # 输出: (2,)
# 查看预先固定的关键字参数
print(multiply_partial.keywords) # 输出: {'scale': 2}
# 调用partial对象,补充剩余参数
print(multiply_partial(3, 4)) # 输出: 2 * 3 * 4 * 2 = 48注意事项
需要注意的是,func属性返回的是原始函数的引用,如果对原始函数做了修改,通过partial对象的func属性调用时也会使用修改后的逻辑。另外,并不是所有可调用对象被partial包装后都能直接看到原始函数,如果原始对象本身不是普通函数(比如是实现了__call__方法的类的实例),那么func属性存储的就是这个实例本身。
from functools import partial
# 定义一个可调用类
class Adder:
def __init__(self, base):
self.base = base
def __call__(self, x):
return self.base + x
adder = Adder(10)
adder_partial = partial(adder, 5)
# func属性存储的是adder实例
print(adder_partial.func is adder) # 输出: True
print(adder_partial()) # 输出: 15通过上述方法,我们就可以快速查看functools.partial对象内部封装的原始函数,同时结合其他属性也能完整了解partial对象的参数固定情况,方便调试和逻辑验证。
functools.partialPython原始函数partial对象函数封装修改时间:2026-06-06 15:43:12