python视角中的参数和参数有啥区别[不重复:)]? [复制]
Posted
技术标签:
【中文标题】python视角中的参数和参数有啥区别[不重复:)]? [复制]【英文标题】:What is the difference between argument and parameter in python perspective [not duplicate :) ]? [duplicate]python视角中的参数和参数有什么区别[不重复:)]? [复制] 【发布时间】:2018-06-11 09:15:19 【问题描述】:我听说这个参数是指方法参数,(例如在下面的代码中)
def abc(a, b):
pass
c = 2
d = 3
abc(c,d)
a 和 b 是参数,c 和 d 是参数。如果我错了,请纠正我?
然后在下面的代码中
def abc(c=1,d):
pass
错误信息是:
语法错误:非默认参数遵循默认参数
还有下面的代码
def abc(a,b):
pass
abc(a=1,2)
错误信息是:
SyntaxError: 关键字 arg 后的非关键字 arg
在两个错误消息中,'no-default argument 遵循默认 argument' 和 'non-keyword arg 在关键字 arg ',为什么没有提到参数?
这两条错误消息都给我造成了很多次的困惑,所以提出了这个问题。错误消息是否有任何特定原因是这样的。您能否让我知道如何记住与该错误相对应的正确错误消息。谢谢。
【问题讨论】:
我总是听到相反的说法:参数是声明中的内容,而参数是您在调用站点传递的内容。但这并不重要;今天有很多人使用可互换的术语,所以只有你是语言规范设计者才有意义。 我总是从参数方程中记住它。不确定这是否有意义。 【参考方案1】:每当你调用一个函数时假设
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并且只有1个'a'值会像f2(x)
一样出现并且变量会' b' 为 10 且 'a' = 10。在 f2(x, y)
中,f2 函数的参数 'a'、'b' 将分别为 10、20。
永远记住,在函数调用中,位置参数首先出现,然后关键字/命名参数必须在后面,因为位置很重要。在函数定义中首先是非默认参数,然后是默认参数。根据您的函数调用,非默认值将对应于位置值,其余值将对应于剩余。
函数调用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'的值,则将采用默认值。
【讨论】:
【参考方案2】:从技术上讲,参数是函数定义中的变量,而实参是在调用点赋予变量的实际值。例如:
def foo(arg):
return arg
foo('Python')
函数定义中的变量arg
是参数,函数调用中的值Python
是该参数的实参。
***有一个很好的描述:Parameters and arguments
【讨论】:
以上是关于python视角中的参数和参数有啥区别[不重复:)]? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
参数化类和元类有啥区别(请使用 Python 中的代码示例)?