意外的Python元组行为

时间:2012-06-08 02:26:33

标签: python

为什么在将此内容提交给Python时会得到一个奇怪的0 2结果?

#tuples ~wtF?
a=()
b=(a)
c=(a,1)
len(b)
len(c)

注意:我得到了列表的预期1 2结果:

a=[]
b=[a]
c=[a,1]
len(b)
len(c)

这种情况发生在Linux上:

$ python --version
Python 2.7.2+

编辑:到目前为止的wrt答案

这是因为,作业中的c=(a,1)会以某种方式出现吗?

>>> print b
()
>>> print c
((), 1)

2 个答案:

答案 0 :(得分:6)

括号不会使它成为元组 - 逗号可以。考虑:

>>> 5 * (3 + 2)
25

括号中的意思是“先做这个”。括号:

b=(a)

意思相同。所以,这相当于

b = a 

所以b is a将是True

要使b包含空元组的元组,您需要执行以下操作:

b = a, 

同样,括号不会使它成为元组(除了()的特殊情况是空元组),逗号就是。

编辑,

c = (a, 1)

a = ()以来,这与:

相同
c = ((), 1)

即,它是一个包含空元组和1的元组。 ()始终是空元组(与[]相同的是空列表),但这只是括号表示'元组'的唯一时间。以上内容与:

相同
c = (), 1

虽然通常人们在这里包括括号(以及元组的reprstr总是如此),但这是为了风格而不是因为它们是有意义的。

答案 1 :(得分:5)

(a)只是一个表达式a,就像(1+2)只是1+2一样。

如果你想要1项元组,你可以写(a,)。 BTW相同的语法适用于列表:[a,]。并且还有函数参数列表。在逗号分隔列表所在的任何地方都可以使用尾随逗号。