如何用inspect判断Python函数参数是否设置默认值?求替代inspect._empty的方法
检查函数未设置默认值的参数:官方推荐方式
嘿,完全理解你不想依赖私有属性inspect._empty的顾虑——直接用下划线开头的内部属性确实有风险,毕竟它可能在Python的后续版本中变动。其实官方已经提供了公开的、安全的替代方案:inspect.empty,这就是专门用来判断参数是否没有默认值的公开常量。
具体实现示例
拿你给出的函数f(a, b=1)来说,我们可以这样检查:
import inspect def f(a, b=1): pass # 获取函数签名 sig = inspect.signature(f) # 遍历所有参数,判断是否有默认值 for param in sig.parameters.values(): if param.default is inspect.empty: print(f"参数 *{param.name}* 未设置默认值") else: print(f"参数 *{param.name}* 的默认值为 `{param.default}`")
运行这段代码会输出:
参数 a 未设置默认值
参数 b 的默认值为1
为什么用inspect.empty?
- 它是Python官方文档明确记载的公开常量,用于表示"无默认值"、"无注解"等空状态,兼容性和稳定性有保障;
- 对比
inspect._empty,后者是内部实现细节,不属于公开API,未来版本可能被修改或移除,直接使用会让代码变得脆弱。
额外小提示
如果需要区分参数类型(比如位置参数、可变参数等),还可以结合param.kind属性判断,比如param.kind == inspect.Parameter.POSITIONAL_OR_KEYWORD用来筛选常规的位置/关键字参数,不过这部分是可选的,取决于你的具体需求。
内容的提问来源于stack exchange,提问作者Pushkar Nimkar
相关产品推荐
相关产品推荐

