强制类型为元组

时间:2014-10-24 19:05:56

标签: python syntax

我是Python的新手,我花了一些时间才意识到,在自动生成的代码中,这种语法意味着整数,而不是元组:

(1)

相比之下,[1]仍然是一个数组。看起来语法不一致: - (

但是,是否有可能强迫(1)成为元组?

修改

对于那些给我的人来说似乎很明显 - 积分。我想知道,为什么到目前为止我还没有碰到它。

事实上,我为学习Python而购买的那本书 - "学习Python,O' Reilly,Mark Lutz,第5版。" 告诉我在第121页,章节元组:

  

从语法上讲,它们通常用括号代替而不是   方括号......

,后面的第一个示例定义了一个这样的元组:

>>> T = (1, 2, 3, 4)    # A 4-item tuple

令人尴尬的是,这本书在亚马逊上有这么多明星。我目前在1500页的第160页。我应该停止阅读吗?

3 个答案:

答案 0 :(得分:4)

您需要输入逗号:

>>> (1,)
(1,)
>>> type((1,))
<type 'tuple'>
>>>

(1)只是括号中的整数1

>>> (1)
1
>>>

这是因为逗号创建了一个元组,而不是括号(如果有的话):

>>> 1,
(1,)
>>> 1, 2, 3
(1, 2, 3)
>>> a = 1, 2, 3
>>> b = (1, 2, 3)
>>> a == b
True
>>>

但请注意,您需要使用括号来创建空元组:

>>> ()
()
>>> type(())
<type 'tuple'>
>>>

虽然可以说在这种情况下是逗号的缺席创建了元组。 ;)


逗号确实创建了一个元组,但我应该更清楚。

你是对的,在[1,2,3]中,逗号不会被解释为元组,因为每一端的方括号表示一个列表文字。

Python中的逗号有四种用途:

  1. 创建一个元组文字,如上所示。

  2. 分隔list / dict / set literal中的项目:

    [1, 2, 3]       # List
    
    {'a':1, 'b':2}  # Dict
    
    {1, 2, 3}       # Set
    
  3. 在函数调用中分隔参数:

    func(a, b)
    
  4. 在各种陈述中分隔名称:

    import a, b
    
    global a, b
    
    nonlocal a, b
    
    with a as b, c as d:
    
    try:
        ...
    except (a, b):
    

    和可迭代的解包:

    a, b, c = [1, 2, 3]
    
  5. 仅在第一种情况下,逗号被解释为创建元组。其他三种用法只是重复使用,字符来表示不同的东西。

答案 1 :(得分:2)

它的语法不一致:是什么使得元组是逗号,而不是parens,而小元组的最小语法是:

my_tuple = 1,

只有空元组才需要parens。

答案 2 :(得分:1)

In [208]: a = (1)

In [209]: type(a)
Out[209]: int

In [210]: a = (1,)

In [211]: type(a)
Out[211]: tuple

In [212]: a = (1,2)

In [213]: type(a)
Out[213]: tuple

In [214]: a = [1]

In [215]: type(a)
Out[215]: list

In [216]: a = [1,]

In [217]: type(a)
Out[217]: list