我是Python的新手,我花了一些时间才意识到,在自动生成的代码中,这种语法意味着整数,而不是元组:
(1)
相比之下,[1]
仍然是一个数组。看起来语法不一致: - (
但是,是否有可能强迫(1)
成为元组?
修改
对于那些给我的人来说似乎很明显 - 积分。我想知道,为什么到目前为止我还没有碰到它。
事实上,我为学习Python而购买的那本书 - "学习Python,O' Reilly,Mark Lutz,第5版。" 告诉我在第121页,章节元组:
从语法上讲,它们通常用括号代替而不是 方括号......
,后面的第一个示例定义了一个这样的元组:
>>> T = (1, 2, 3, 4) # A 4-item tuple
令人尴尬的是,这本书在亚马逊上有这么多明星。我目前在1500页的第160页。我应该停止阅读吗?
答案 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中的逗号有四种用途:
创建一个元组文字,如上所示。
分隔list / dict / set literal中的项目:
[1, 2, 3] # List
{'a':1, 'b':2} # Dict
{1, 2, 3} # Set
在函数调用中分隔参数:
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]
仅在第一种情况下,逗号被解释为创建元组。其他三种用法只是重复使用,
字符来表示不同的东西。
答案 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