【问题标题】:Tuple declaration in PythonPython中的元组声明
【发布时间】:2016-04-20 22:26:30
【问题描述】:

在 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'>

是否有pythonic风格来声明元组?如果有,请同时参考相关PEP或链接。

实现元组的“最终产品”没有区别,但带括号和不带括号的元组的初始化方式有区别吗(在 CPython 中)?

【问题讨论】:

  • 相关:stackoverflow.com/questions/16017811/…。 (没有任何区别 - 逗号定义元组,括号是可选的,但通常很有用。)
  • 错了,应该是CPython
  • 嗯...我更喜欢 x = (0.25, 0.25, 0.25, 0.25) 因为很明显 x 是一个元组。 这更像是一个真正的元组(我的意思是,就像输出一样)。
  • Err 抱歉,我已将其作为 stackoverflow.com/questions/16017811/… 的副本关闭,但事实并非如此。 Nikita 的答案是正确的。

标签: python tuples immutability cpython packing


【解决方案1】:

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

“显式优于隐式。”

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

【讨论】:

  • 一个元素元组上的点不正确。 x = 1,; x(1,)
  • @alvas:Nikita 说:定义一个元组时,你需要一个逗号。 与括号无关。
  • @KevinGuan 啊,我误会了。
  • x=1,x=(1,) 都是合法的元组,type(x) 将给出&lt;class 'tuple'&gt;。但是x=1x=(1) 只是整数,type(x) 会在这里给出&lt;class 'int'&gt;
  • 并且一个 zero 元素元组需要括号:().
【解决方案2】:

没有特定的“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 中的括号相同(表示先加然后乘)。

唯一需要括号的情况是创建空元组时。这是由 fx 表达式 x = () 完成的,因为没有其他方法。唯一必须使用尾随逗号的情况是创建长度为 1 的元组(即 x = 1,),因为否则无法与元素 1 区分开来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-26
    • 2016-04-13
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多