如何查看Python functools.partial对象内部封装的原始函数?

来源:编程网作者:广州SEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何查看Python functools.partial对象内部封装的原始函数?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何查看Python functools.partial对象内部封装的原始函数?》有用,将其分享出去将是对创作者最好的鼓励。

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

如何查看Python functools.partial对象内部封装的原始函数?

functools.partial对象的核心属性

functools.partial生成的对象是functools.PartialType类型的实例,这个类型内置了三个公开属性,其中func属性就是用来存储内部封装的原始函数的,另外两个属性分别是argskeywords,分别存储预先固定的位置参数和关键字参数。

查看原始函数的具体方法

只需要访问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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。