使用逗号声明元组的语法很清楚,我看到它的任何地方都使用括号括起来的文字,例如: (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被隐式转换为元组吗?
答案 0 :(得分:6)
这只是操作的顺序:
>>> 1 if True else 0,
(1,)
>>> (1 if True else 0),
(1,)
>>> 1 if True else (0,)
1
答案 1 :(得分:2)
这是因为三元运算符(a if b else c
)比“逗号”运算符强。
您可以将其与or
强于and
的逻辑and
和or
运算符进行比较:
if foo and bar or bats:
# means:
if (foo and bar) or bats: