You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python函数中使用引用其他形参的dict作为默认参数是否可行

结论

你给出的写法无法正常运行,直接执行这段代码会在函数定义阶段就抛出NameError,实现不了预期效果。

原因

  • Python的函数默认参数是在函数定义时完成求值的,不是每次调用函数时才计算。定义函数的阶段,形参p2只是函数签名里的占位符,没有绑定任何实际传入的数值,也不在默认参数的求值作用域里,所以写{"t": p2}时解释器找不到p2这个变量,直接报错。
  • 额外注意:即便不涉及引用其他形参,直接用dict、list这类可变对象作为函数默认参数也是Python的经典易错点——这个默认对象会在所有函数调用之间共享,一旦在函数内修改它,后续调用的默认值就会被污染,出现不符合预期的结果。

正确实现方法

用None作为默认参数的哨兵值,等进入函数体、所有形参都已经绑定了本次调用的传入值之后,再判断参数是否缺省,构造你需要的dict默认值即可,参考代码:

def f(l, p2, p=None):
    # 没有传入p参数时,用本次调用的p2值生成默认字典
    if p is None:
        p = {"t": p2}
    print(l, p2, p)

# 测试用例
f(12, 13)
# 运行输出:12 13 {'t': 13}
f(12, 13, {"t": "自定义传入值"})
# 运行输出:12 13 {'t': '自定义传入值'}

这种写法既解决了默认参数引用其他形参的问题,也避开了可变默认参数的共享污染问题。

内容的提问来源于stack exchange,提问作者Karen William

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 00:12:27