函数传递的参数是否包含在括号中,因为它们是作为元组处理的,还是只是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
。