2012-06-08 6 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+ 



[править: аппроксимируемостью ответы до сих пор]

так это как-то из-за , в c=(a,1) задания?

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

ответ

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 

Хотя обычно люди включают скобки здесь (и repr и str кортежей всегда делает), это за стиль, а не потому, что они осмысленные.

+0

[9000] (http://stackoverflow.com/users/223424/9000) избил вас, но я даю вам +1 anyhows =) – violet313

+0

ok, я временно не принят, поскольку из-за моего редактирование ~ пойти на это .... =) – violet313

+0

@ violet313 см. мой обновленный ответ. – lvc

5

(a) просто выражение a, как (1+2) просто 1+2.

Если вы хотите 1-элементный кортеж, вы пишете (a,). BTW такой же синтаксис работает со списками: [a,]. И с списками аргументов функции тоже. Конечная запятая допустима везде, где находится список разделенных запятыми.

+0

Я сделал +1 это, но я все еще смущен. см. мои правки .. – violet313

Смежные вопросы