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

从Python视角区分argument与parameter及相关语法报错疑问

Python中Parameter与Argument的核心差异及常见报错解析

嘿,我来帮你彻底搞清楚这两个容易混淆的概念,还有那两个报错的门道!

一、先纠正你对Parameter和Argument的认知错误

很多刚接触Python的同学都会搞混这俩,我用你给的代码直接拆解:

def abc(a, b):  # 这里的a、b是**parameters(形参/参数)**
    pass

c = 2
d = 3
abc(c, d)  # 这里传入的c、d是**arguments(实参/自变量)**

给你个极简记忆法:

  • Parameter:是函数定义时括号里的「占位符」,是函数“索要”的东西,本质是变量名
  • Argument:是调用函数时实际塞进去的「具体值/变量」,是给函数的“实际输入”

简单说:定义时的是parameter,调用时的是argument——你之前刚好搞反啦😉

二、为什么报错信息里只用arg(Argument的缩写)?

你观察得很仔细!这两个SyntaxError里都只提了arg,其实原因很简单:
Python的报错信息在这类语法规则问题里,用arg作为一个通用的、口语化的指代——不管是定义时的形参还是调用时的实参,在讨论“参数的位置/顺序规则”时,用arg能更清晰地聚焦于规则本身,避免因为区分parameter和argument反而增加理解成本。

接下来逐个拆解这两个报错,顺便给你记忆技巧:

1. 报错:SyntaxError: non-default argument follows default argument

对应的错误代码:

def abc(c=1, d): pass  # 错误写法!

规则本质:

函数定义时,带默认值的参数必须放在不带默认值的参数后面。因为不带默认值的是“必填项”,带默认值的是“可选项”,必填项必须先声明,逻辑才通顺。

记忆技巧:

把参数当成点餐:必点的汉堡(不带默认值的参数)要先选,可选的加芝士(带默认值的参数)放后面,总不能先选“加不加芝士”再选“要不要汉堡”吧?

2. 报错:SyntaxError: non-keyword arg after keyword arg

对应的错误代码:

def abc(a, b): pass
abc(a=1, 2)  # 错误写法!

规则本质:

函数调用时,位置实参必须放在关键字实参的前面。位置实参是按顺序匹配形参的,关键字实参是指名道姓匹配的,一旦用了关键字实参,后面再用位置实参会让解释器搞不清你要给哪个形参传值。

记忆技巧:

把传参当成介绍朋友:先按顺序说“这是张三、这是李四”(位置实参),如果中途说“这位是王老五(就是戴黑框眼镜的那个)”(关键字实参),后面就不能再随便说“还有这位”(位置实参)——谁知道你说的是哪个?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:44:57