2012-06-08 95 views
0

爲什麼我會得到一個奇怪的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) 

回答

6

括號不會使它成爲一個元組 - 逗號。考慮:

>>> 5 * (3 + 2) 
25 

括號裏的意思是'先做這個'。括號內:

b=(a) 

意思是一樣的。所以,這相當於

b = a 

所以b is aTrue

爲了使b包含空的元組的元組,你需要做的:

b = a, 

再次,括號不讓它一個元組(除的()的特殊情況是空的元組) ,逗號的確如此。

對於編輯,

c = (a, 1) 

由於a =(),這是相同的:

c = ((), 1) 

即,它是包含空的元組和1的元組。 ()始終是空元組(與[]相同是空列表),但這是括號表示「元組」的唯一時間。以上是一樣的:

c =(), 1 

雖然一般人做包括這裏的括號(和元組的reprstr總是這樣做),這是風格,而不是因爲他們是有意義的。

+0

[9000](http://stackoverflow.com/users/223424/9000)擊敗你,但我給你一個+1 anyhows =) – violet313

+0

好吧,我暫時不接受,因爲我的編輯〜去吧...... =) – violet313

+0

@ violet313看到我更新的答案。 – lvc

5

(a)僅僅是一個表達a,像(1+2)只是1+2

如果你想要1項目元組,你寫(a,)。 順便說一句,與列表相同的語法:[a,]。還有函數參數列表。在逗號分隔列表的任何位置都可以使用尾隨逗號。

+0

我做了+1這個,但我仍然困惑。看到我的編輯.. – violet313