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

Python关键字参数函数调用等价性疑问:foo(arg1=123, arg2=None)与foo(arg1=123)是否等价?

两种Python函数调用是否等价?

嘿,这个问题的答案得看foo函数本身是怎么定义的,分几种情况跟你唠唠:

情况1:arg2的默认参数就是None

如果foo的定义是这样的:

def foo(arg1, arg2=None):
    # 函数逻辑

那这两种调用完全等价。因为显式传递arg2=None和使用参数的默认值效果完全一致——函数内部拿到的arg2都是None。

举个实际运行的例子:

def foo(arg1, arg2=None):
    print(f"arg1: {arg1}, arg2: {arg2}")

foo(arg1=123, arg2=None)  # 输出:arg1: 123, arg2: None
foo(arg1=123)             # 输出:arg1: 123, arg2: None

情况2:arg2的默认参数不是None

如果foo的定义里arg2有其他默认值,比如:

def foo(arg1, arg2=0):
    # 函数逻辑

那这两种调用绝对不等价。第一种调用会把arg2强制设为None,而第二种会使用默认值0,函数执行的结果大概率会不一样。

看例子:

def foo(arg1, arg2=0):
    print(f"arg1: {arg1}, arg2: {arg2}")

foo(arg1=123, arg2=None)  # 输出:arg1: 123, arg2: None
foo(arg1=123)             # 输出:arg1: 123, arg2: 0

情况3:arg2没有默认参数

如果foo的定义要求必须传递arg2,没有默认值:

def foo(arg1, arg2):
    # 函数逻辑

那第二种调用foo(arg1=123)会直接抛出TypeError,因为缺少了必需的参数arg2,连执行都做不到,自然和第一种调用完全不等价。

例子:

def foo(arg1, arg2):
    print(f"arg1: {arg1}, arg2: {arg2}")

foo(arg1=123, arg2=None)  # 正常执行,输出:arg1: 123, arg2: None
foo(arg1=123)             # 报错:TypeError: foo() missing 1 required positional argument: 'arg2'

总结

一句话:只有当foo函数中arg2参数的默认值恰好是None时,foo(arg1=123, arg2=None)和foo(arg1=123)这两种调用才是等价的;其他任何情况,两者的行为都不一样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:18:46