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 中的代码示例)?

Python 中的 !r 和 %r 有啥区别?

python中的pass和continue有啥区别[重复]

Python中的Asyncio和Thread模块有啥区别[重复]

Python 3.8中的list和List有啥区别[重复]