Python中的元组声明

8
在Python中,可以使用括号显式地声明元组,如下所示:
>>> x = (0.25, 0.25, 0.25, 0.25)
>>> x
(0.25, 0.25, 0.25, 0.25)
>>> type(x)
<type 'tuple'>

如果没有使用括号,Python 会自动将其打包成一个不可变的元组:

>>> x = 0.25, 0.25, 0.25, 0.25
>>> x
(0.25, 0.25, 0.25, 0.25)
>>> type(x)
<type 'tuple'>

有没有一种Python风格来声明元组?如果有,请同时引用相关的PEP或链接。

在实现元组时,“最终成果”并没有区别,但是使用和不使用括号初始化元组是否存在区别(在CPython中)?


1
相关:https://dev59.com/0mQo5IYBdhLWcg3wfPUa。(没有任何区别 - 逗号定义了元组,括号是可选的但通常很有用。) - Alex Riley
糟糕,错了,应该是“CPython”。 - alvas
嗯...我更喜欢 x = (0.25, 0.25, 0.25, 0.25),因为它很清楚 x 是一个元组。而且这更像是一个真正的元组(我的意思是,就像输出那样)。 - Remi Guan
1
抱歉,我将其误认为是https://dev59.com/0mQo5IYBdhLWcg3wfPUa的重复问题,但实际上并不是。Nikita的答案才是正确的。 - bruno desthuilliers
2个回答

5

从实际角度来看,最好始终使用括号,因为它有助于代码的可读性。正如其中一个 import this 的座右铭所说:

"明确胜于含蓄."

还要记住,在定义单个元组时需要逗号:one_tuple = (15, )


一个元素的元组中的点是不正确的。x = 1,; x会得到(1,) - alvas
3
@alvas:Nikita说:“定义一个单元素元组时需要逗号”,不是关于括号的。 - Remi Guan
@KevinGuan 哦,我误解了。 - alvas
x=1,x=(1,) 都是合法的元组,type(x) 将返回 <class 'tuple'>。但是 x=1x=(1) 只是整数,type(x) 在这里将返回 <class 'int'> - Nikita
1
一个只有零个元素的元组需要使用括号:() - RemcoGerlich
有趣的是,声明一个零元组是非法的。 - alvas

-1

没有特别的“Pythonic”方式。除了空括号,括号只是一个控制优先级的括号。也就是表达式x = 1,2,3x = (1,2,3)相同(因为元组在赋值之前已经创建了)。

它可能有所不同的地方是,顺序很重要的地方。例如,如果l是一个列表或元组,则表达式1,2,l.count(1)意味着在创建元组之前调用了l.count,而(1,2,l).count(1)则首先创建了元组,然后调用了它的count函数。这与(2+3)*4中的括号相同(它表示先加再乘)。

唯一需要使用括号的情况是创建空元组。这通过表达式x = ()实现,因为没有其他方法。唯一需要使用尾随逗号的情况是创建长度为1的元组(例如x = 1,),否则无法区分元素1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接