Comme mentionné ici , vous pouvez utiliser l'étoile pour décompresser un nombre inconnu de variables (comme dans les fonctions), mais uniquement dans python 3:
>>> a, *b = (1, 2, 3)
>>> b
[2, 3]
>>> a, *b = (1,)
>>> b
[]
En python 2.7, le mieux que je puisse trouver est (pas terrible, mais ennuyeux):
c = (1, 2, 3)
a, b = c[0], c[1:] if len(c) > 1 else []
Existe-t-il un moyen d'importer cela à partir de la division __future__, ou aurai-je besoin de ma propre fonction pour effectuer un déballage de longueur inconnue dans python 2.7?
dans python 2.X, vous pouvez faire:
c = (1, 2, 3)
a, b = c[0], c[1:]
tant que c
a au moins un membre, cela fonctionnera car si c
ne contient qu'une seule chose c[1:]
est []
.
Vous devriez probablement vous assurer qu'il y a au moins une chose dans c
, sinon c[0]
lèvera une exception.
Vous pourriez faire quelque chose comme:
try:
c = Tuple(c)
a, b = c[0], c[1:]
except TypeError, IndexError:
# c is not iterable, or c is iterable, but it doesn't have any stuff in it.
# do something else
pass
(a,b) = (None, []) if not len(c) else (c[0], c[1:])
est également une option pour gérer le cas où c est une séquence vide, bien qu'il ne fasse pas de distinction entre [Aucun] et [] en termes d'affectations à a, b. Alors utilisez-le avec soin, le try/except est probablement le meilleur.
Je ne vois aucune réelle différence entre Python 3 et 2.7 lors de la manipulation d'un conteneur vide, mais la bonne chose à propos de Python 3 ici, c'est que cela fonctionne avec n'importe quel itérable).
Cela fonctionne en 2.7 si vous savez que c est un générateur.
a,b = c.next(), c
Mais toute la beauté du déballage semble nécessiter Python 3.
from sys import argv
script=argv
def Fun(arg1, *argv):
print "First argument :", script
for arg in argv:
print"Your variable is:", arg
Fun('scrpit', 'first', 'second', 'third')