Python 强制类型为元组

Python 强制类型为元组,python,syntax,Python,Syntax,我是Python新手,我花了一些时间才意识到,在自动生成的代码中,此语法表示整数,而不是元组: (1) 相比之下,[1]仍然是一个数组。看起来语法不一致:- 但是,是否有可能强制1成为元组 编辑: 对那些给我分数的人来说,这似乎是显而易见的。我想知道,为什么我到现在才发现它 事实上,我为学习Python而买的书——学习Python,O'Reilly,Mark Lutz,第五版。在第121页,章节元组中告诉我: 从语法上讲,它们通常用括号编码,而不是用 方括号 下面的第一个示例定义了这样一个元组

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

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

但是,是否有可能强制1成为元组

编辑:

对那些给我分数的人来说,这似乎是显而易见的。我想知道,为什么我到现在才发现它

事实上,我为学习Python而买的书——学习Python,O'Reilly,Mark Lutz,第五版。在第121页,章节元组中告诉我:

从语法上讲,它们通常用括号编码,而不是用 方括号

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

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

令人尴尬的是,这本书在亚马逊上获得了如此多的明星。我现在在1500页的第160页。我应该停止读它吗

你需要加一个逗号:

>>> (1,)
(1,)
>>> type((1,))
<type 'tuple'>
>>>
这是因为创建元组的是逗号,而不是括号(如果有的话):

>>> 1,
(1,)
>>> 1, 2, 3
(1, 2, 3)
>>> a = 1, 2, 3
>>> b = (1, 2, 3)
>>> a == b
True
>>>
但是请注意,创建空元组时确实需要括号:

>>> ()
()
>>> type(())
<type 'tuple'>
>>>
分离函数调用中的参数:

func(a, b)
在各种语句中分隔名称:

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]

只有在第一种情况下,逗号才被解释为创建元组。其他三种用法只是重复使用,字符表示不同的意思。

这不是语法上的不一致性:元组的组成是逗号,而不是paren,一般元组的最小语法是:

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
my_tuple = 1,

只有空元组才需要paren

相关报道:@wim:作为一个初学者,我对这个问题和答案一个字也不懂。然而,似乎单用逗号并不总是足够的,并且与其他逗号冲突syntaxes@iCodez:是的,可以;元组的构成要素是逗号,而不是括号——正如iCodez回答的注释中所提到的:[1,2,3]意味着数组有一个元组1,2,3。所以单用逗号似乎是不够的。@ValentinHeinitz:还有?你也可以说“somefunc1,2,3”不能使parens中的内容成为元组。Python的语法和语法都有文档记录,一些语法规则有更高优先级的函数调用、list Literal等。我仍在学习Python的概念,但将函数定义为带有参数包装在元组中的执行块可能是相当正确的。我怀疑我的_tuple=1是一条捷径,它在某些上下文中有效,因为Python本身添加了括号。更健壮的语法似乎是my_tuple=1,@ValentinHeinitz不要浪费时间假设。Python语法有一个正式的定义,你只需要阅读它。创建元组的是逗号,而不是括号——当我再次思考这个语句时,它不可能完全正确。这意味着[1,2,3]是一个元组1,2,3的数组。不过,添加逗号的观点对我有帮助。@ValentinHeinitz-我在编辑中解释得更好。另外,你正在读的书很好。我认为它只是使用了括号,因为它们很常见,尽管没有必要。T=1,2,3,4将产生相同的结果。像你这样的书的目的是教你Python。我不认为它涉及像这样复杂的语法规则。
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
my_tuple = 1,