【发布时间】:2017-10-03 22:50:40
【问题描述】:
用逗号声明元组的语法很清楚,我在任何地方看到它都与用大括号括起来的文字一起使用,例如(1,)。
但是,python 确实允许使用逗号而不用大括号来声明元组,并且在一种特殊情况下会出现奇怪的行为,请参见下面的代码。
def ifElseExpressionTrailingComma():
return 1 if True else 0,
def ifElseExpressionTrailingCommaWrapped():
return 1 if True else (0,)
print ifElseExpressionTrailingComma()
print ifElseExpressionTrailingCommaWrapped()
输出:
(1,) # what??
1
在 2.7 和 3.5 上测试。 有人可以解释为什么 1 被隐式转换为元组吗?
【问题讨论】:
-
这不是隐含的。三元表达式被解析为单个值,一个或零,然后尾随的逗号使其成为一个元组。在第二种情况下,括号表示表达式的一个可能返回值是一个元组,另一个是整数。鉴于您编写的代码清楚地展示了这种行为,您期望得到什么样的答案并不明显。
-
是的,逗号应用于三元的评估结果并不是很明显,因为它的优先级较低。谢谢,伙计们。
-
@jonrsharpe 代码确实显示了这一点,但为了完成我的回答,我试图找到记录的这个优先级,但不能docs.python.org/3.6/reference/…
-
@Chris_Rands 逗号不是运算符:docs.python.org/3/faq/…
-
@jonrsharpe 当然,谢谢!
标签: python if-statement syntax tuples