Python函数参数是包含在元组中还是仅包含在传统的圆括号中



函数传递的参数是否包含在括号中,因为它们是作为元组处理的,还是只是f(x)约定的结果?

即(b,a,r)是这里的元组:

def foo(b, a, r):
    pass

或者,它更像数学方程中括号的使用方式,例如

>>> 3 * 2 + 1
7
>>> 3 * (2 + 1)
9

Python不将这些视为元组。例如,元组不采用keyword=value参数,但调用语法采用

元组不是由括号形成的,而是由逗号形成的,并且当将元组与Python中逗号的其他用法区分开来时,您只需要在元组周围使用括号。就像在函数调用中一样,逗号分隔位置参数。

Python语法将调用中的括号和逗号定义为调用表达式语法的一部分:

call                 ::=  primary "(" [argument_list [","]
                          | expression genexpr_for] ")"

而在其他地方,元组被定义为由逗号组成。参见表达式列表

expression_list ::=  expression ( "," expression )* [","]

至少包含一个逗号的表达式列表会生成一个元组。元组的长度是列表中表达式的数目。

请注意,只有","逗号是字面语法的一部分,此处的(...)括号是定义语法的语法的一部份。

括号(分组表达式)的另一种用法在排列形式中定义:

带括号的形式是一个包含在括号中的可选表达式列表,请再次注意文字"("")"字符:

parenth_form ::=  "(" [expression_list] ")"

带括号的表达式列表生成该表达式列表生成的任何内容:如果列表至少包含一个逗号,则生成一个元组;否则,它将生成构成表达式列表的单个表达式。

Python语法中还有一些地方使用了括号,请参阅完整的语法规范;这些通常会呼应调用语法(例如,函数和类定义、decorator)或带括号的形式(例如,对导入的名称进行分组)以及生成器表达式。

您可以通过查看Python语法来回答这个问题。

相关线路为:

funcdef: 'def' NAME parameters ['->' test] ':' suite
parameters: '(' [typedargslist] ')'

所以在你的例子中,语法会说(b, a, r)是一个被括号包围的typedargslist

最新更新