Как передать tuple в качестве аргумента в Python?

Предположим, мне нужен список кортежей. Вот моя первая идея:

li = [] li.append(3, 'three') 

Результат:

 Traceback (most recent call last): File "./foo.py", line 12, in <module> li.append('three', 3) TypeError: append() takes exactly one argument (2 given) 

Поэтому я прибегаю к:

 li = [] item = 3, 'three' li.append(item) 

который работает, но выглядит слишком многословным. Есть ли способ лучше?

Добавить круглые скобки:

 li.append((3, 'three')) 

Скобки с запятой создают кортеж, если только это не список аргументов.

Это значит:

 () # this is a 0-length tuple (1,) # this is a tuple containing "1" 1, # this is a tuple containing "1" (1) # this is number one - it's exactly the same as: 1 # also number one (1,2) # tuple with 2 elements 1,2 # tuple with 2 elements 

Аналогичный эффект происходит с кортежем 0 длины:

 type() # <- missing argument type(()) # returns <type 'tuple'> 

Это потому, что это не кортеж, это два аргумента метода add . Если вы хотите дать ему один аргумент, который является кортежем, сам аргумент должен быть (3, 'three') :

 Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> li = [] >>> li.append(3, 'three') Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: append() takes exactly one argument (2 given) >>> li.append( (3,'three') ) >>> li [(3, 'three')] >>> 

Скобки, используемые для определения кортежа, являются необязательными в операторах return и assignement. то есть:

 foo = 3, 1 # equivalent to foo = (3, 1) def bar(): return 3, 1 # equivalent to def bar(): return (3, 1) first, second = bar() # equivalent to (first, second) = bar() 

в вызове функции вы должны явно определить кортеж:

 def baz(myTuple): first, second = myTuple return first baz((3, 1)) 

он выдает эту ошибку, потому что list.append принимает только один аргумент

попробуйте этот список + = ['x', 'y', 'z']