En fait, le comportement est seulement un peu « bizarre. » :-)
Votre paramètre x
est préfixé d'une étoile, ce qui signifie que tous les arguments que vous passez à la fonction seront "regroupés" en un seul multiplet, et x
sera ce tuple.
La valeur (1,)
est la façon Python écrit un tuple d'une valeur, pour contraster avec (1)
, ce qui serait le nombre 1.
Voici un cas plus général:
def f(x, *y):
return "x is {} and y is {}".format(x, y)
ici quelques pistes:
>>> f(1)
'x is 1 and y is()'
>>> f(1, 2)
'x is 1 and y is (2,)'
>>> f(1, 2, 3)
'x is 1 and y is (2, 3)'
>>> f(1, 2, 3, 4)
'x is 1 and y is (2, 3, 4)'
Remarquez comment le premier argument va à x
et tous les arguments suivants sont emballés en t Le tuple y
. Vous avez peut-être trouvé la façon dont Python représente les tuples avec 0 ou 1 composants un peu bizarre, mais il est logique quand vous réalisez que (1)
doit être un nombre et donc il doit y avoir un moyen de représenter un tuple mono-élément. Python utilise simplement la virgule de fin comme une convention, c'est tout.
Cela signifie que la valeur imprimée est un tuple avec un seul élément à l'intérieur. – Rockybilly