我听说这个参数意味着方法参数,(例如在下面的代码中)
def abc(a, b):
pass
c = 2
d = 3
abc(c,d)
a和b是参数,c和d是参数。如果我错了,请纠正我?
然后在下面的代码中
def abc(c=1,d):
pass
错误消息是:
SyntaxError:非默认参数遵循默认参数
以及下面的代码
def abc(a,b):
pass
abc(a=1,2)
错误消息是:
SyntaxError:关键字arg之后的非关键字arg
在两个错误消息中,' no-default 参数遵循默认参数'关键字 arg '之后的'非关键字 arg ,为什么没有提及参数?
这两个错误消息让我多次困惑,因此提出了这个问题。错误消息是否有任何特定原因是这样的。你也可以告诉我如何记住与该错误相对应的正确错误消息。谢谢。
答案 0 :(得分:2)
每当你调用函数时,假设
def f1(a, b):
pass
x = 10
y = 20
f1(x, y)
上述值'x','y'是参数,'a','b'是参数。在函数/方法调用期间,这些变量被称为参数,因为你可以传递任何类似'x','y'或者'p','q'等等。但是在函数定义中,这些变量被称为参数,因为它们只是对于该函数而言,这只是对该函数的限制。
在Python中有位置参数,默认参数,非默认参数,关键字参数和命名参数的概念。
def f2(a, b=10):
pass
x = 10
y = 20
f2(x)
f2(x, y)
在上面的函数中,'b'是一个默认参数,默认情况下它的值是10,如果调用函数f2时只有{a'的1个值会出现f2(x)
和变量'b'为10,'a'为10.而f2(x, y)
f2函数的参数'a','b'分别为10,20。
永远记住,在函数调用位置参数首先是关键字/命名参数必须稍后,因为位置很重要。在函数定义中,首先是非默认参数,然后是默认参数。非默认值对应于位置1,其余值对应于剩余值,具体取决于您的函数调用。
在函数调用f2(x)
的情况1中,这里'x'是函数调用期间的位置参数,函数定义中的'a'是位置参数,'y'是默认参数。
在函数调用f2(x, y)
的情况2中,'x'和'y'都是位置参数,在函数定义'a'和'b'现在都是位置参数,因为'y'将通过值20到参数'b'。
只有在任何函数调用(例如案例1 f1(x)
或f1(p)
)没有为该参数传递参数时,才会使用任何函数定义的默认值,然后默认值为'b' = 10而'a'将是'x'或'p'。
接下来假设,
def f3(a, b):
pass
f3(a=5, b=15)
f3(b=100, a=200)
上面的调用f3,其参数'a'为5,'b'为15是关键字/命名参数,因为它们的名称/键与其值相关联。 'a'作为值5的名称/键链接,'b'作为名称/键链接,'b'作为名称/键链接到值'15'。你可以把它想象成一本字典。
这里在函数调用期间确保名称/键必须与函数定义相同,否则我们会收到错误。还要确保在函数调用或函数定义中不重复相同的参数/参数也会给我们带来错误。
您可以按任意顺序指定这些基于关键字/命名的参数。
与情况2一样,我们有f3(b=100, a=200)
。在函数定义中,名称/键“a”对应于值200,名称/键“b”对应于值100.
def f4(a=1, b=2):
pass
f4()
f4(b=20)
f4(a=10)
f4(a=100, b=200)
f4(b=50, a=75)
这里的f4函数定义'a'和'b'的默认值为1和2.
在案例1中,将采用默认值。
在案例2中,只有'b'作为名称/键值20传递,对应于函数定义中的'b','a'和'b'将分别为1,20。
在案例3中,只有'a'作为名称/键值10传递,对应于函数定义中的'a','a'和'b'将分别为10,2。
在案例4中,'a'和'b'都作为名称/键值50,75传递,它们对应于函数定义中的'a'和'b','a'和'b'将是75和50分别。
请记住,名称/键参数仅适用于f4(a=3, b=4)
等函数调用期间。在函数定义def f5(a, b=20)
期间,'a'是非默认参数或位置参数,'b'是默认参数,如果在函数调用f5期间没有传递'b'的值,则将采用默认值
答案 1 :(得分:0)
从技术上讲,参数是函数定义中的变量,参数是在调用点给变量赋予的实际值。例如:
def foo(arg):
return arg
foo('Python')
函数定义中的变量arg
是参数,函数调用中的值Python
是该参数的参数。
维基百科有一个很好的描述:Parameters and arguments