函数是否将参数括在括号中,因为它们是作为元组处理的,还是只是f(x)约定的结果?
即。是(b,a,r)这里的元组:
def foo(b, a, r):
pass
或者,它更像是在数学方程式中使用括号的方式,例如
>>> 3 * 2 + 1
7
>>> 3 * (2 + 1)
9
答案 0 :(得分:3)
Python并没有将它们视为元组。例如,元组不会使用keyword=value
个参数,但调用语法会。
元组不是由括号构成的,它们是由逗号组成的,当你从其他逗号使用中消除元组的歧义时,你只需要在元组周围使用括号在Python中。就像在函数调用中一样,逗号分隔位置参数。
Python语法将调用中的括号和逗号定义为part of the call expression syntax:
call ::= primary "(" [argument_list [","] | expression genexpr_for] ")"
而其他地方的元组被定义为由逗号组成。见expression lists:
expression_list ::= expression ( "," expression )* [","]
包含至少一个逗号的表达式列表会产生一个元组。元组的长度是列表中表达式的数量。
请注意,只有","
逗号是文字语法的一部分,此处的(...)
括号是定义语法的语法的一部分。
括号的另一种用法(分组表达式)在parethezised forms中定义:
带括号的表单是括在括号中的可选表达式列表,再次注明文字
"("
和")"
字符:parenth_form ::= "(" [expression_list] ")"
带括号的表达式列表产生表达式列表产生的任何内容:如果列表包含至少一个逗号,则产生一个元组;否则,它会产生构成表达式列表的单个表达式。
Python语法中还有一些地方使用括号,请参阅full grammar specification;这些通常会回调调用语法(例如function和class定义,装饰器)或带括号的形式(例如,对导入的名称进行分组),以及generator expressions。
答案 1 :(得分:1)
您可以通过查看Python Grammar.
来回答这个问题相关的行是:
funcdef: 'def' NAME parameters ['->' test] ':' suite
parameters: '(' [typedargslist] ')'
因此,在您的示例中,语法会说(b, a, r)
是括号括起来的typedargslist
。