Как передать 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)

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

Ответ 1

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

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 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'>

Ответ 2

Это потому, что это не кортеж, это два аргумента метода 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')]

>>> 

Ответ 3

Круглые скобки, используемые для определения кортежа, являются необязательными в операторах 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))

Ответ 4

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

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

Ответ 5

def product(my_tuple):
    for i in my_tuple:
        print(i)

my_tuple = (2,3,4,5)
product(my_tuple)

Вот как вы передаете Tuple в качестве аргумента