web-dev-qa-db-fra.com

Comment passer Tuple en argument en Python?

Supposons que je veuille une liste de n-uplets. Voici ma première idée:

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

Ce qui résulte en:

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

Je recourt donc à:

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

ce qui fonctionne, mais semble trop verbeux. Y a-t-il un meilleur moyen?

17
Eric Wilson

Ajoutez plus de parenthèses:

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

Les parenthèses avec une virgule créent un tuple, à moins qu'il ne s'agisse d'une liste d'arguments.

Cela signifie:

()    # 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

Un effet similaire se produit avec un tuple de longueur 0:

type() # <- missing argument
type(()) # returns <type 'Tuple'>
41
viraptor

C'est parce que c'est pas un tuple, ce sont deux arguments de la méthode add. Si vous voulez lui donner l'argument one qui est un tuple, l'argument lui-même doit être (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')]

>>> 
7
paxdiablo

Les parenthèses utilisées pour définir un tuple sont facultatives dans les instructions de retour et d’affectation. c'est à dire:

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()

dans l'appel de fonction, vous devez définir explicitement le tuple:

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

baz((3, 1))
3
Simon Bergot

il renvoie cette erreur car list.append ne prend qu'un seul argument

essayez ceci liste + = ['x', 'y', 'z']

0
Argho Chatterjee