意外的Python元组行为

vio*_*313 0 python

0 2当我把它交给Python时,为什么会得到一个奇怪的结果?

#tuples ~wtF?
a=()
b=(a)
c=(a,1)
len(b)
len(c)
Run Code Online (Sandbox Code Playgroud)

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

a=[]
b=[a]
c=[a,1]
len(b)
len(c)
Run Code Online (Sandbox Code Playgroud)

这发生在Linux上:

$ python --version
Python 2.7.2+
Run Code Online (Sandbox Code Playgroud)

编辑:wrt回答到目前为止

因为作业,中的某种原因,这也是如此c=(a,1)

>>> print b
()
>>> print c
((), 1)
Run Code Online (Sandbox Code Playgroud)

lvc*_*lvc 6

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

>>> 5 * (3 + 2)
25
Run Code Online (Sandbox Code Playgroud)

括号里面的意思是"先做这个".括号中:

b=(a)
Run Code Online (Sandbox Code Playgroud)

意思是一样的.所以,这相当于

b = a 
Run Code Online (Sandbox Code Playgroud)

所以b is aTrue.

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

b = a, 
Run Code Online (Sandbox Code Playgroud)

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

对于编辑,

c = (a, 1)
Run Code Online (Sandbox Code Playgroud)

因为a = (),这与以下相同:

c = ((), 1)
Run Code Online (Sandbox Code Playgroud)

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

c = (), 1
Run Code Online (Sandbox Code Playgroud)

虽然一般人做包括这里的括号(和reprstr元组总是这样),这是风格,而不是因为他们是有意义的.


900*_*000 5

(a)只是一个表达a,就像(1+2)1+2.

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