从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
相关产品推荐
相关产品推荐

