Absolument (pour l'exemple que vous avez fournies.
Les Tuples sont des citoyens à part entière en Python
Il y a une fonction builtin divmod()
qui fait exactement cela.
q, r = divmod(x, y) # ((x - x%y)/y, x%y) Invariant: div*y + mod == x
Il y a d'autres exemples: zip
, enumerate
, dict.items
.
for i, e in enumerate([1, 3, 3]):
print "index=%d, element=%s" % (i, e)
# reverse keys and values in a dictionary
d = dict((v, k) for k, v in adict.items()) # or
d = dict(zip(adict.values(), adict.keys()))
BTW, les parenthèses ne sont pas nécessaires la plupart du temps.
Citation de Python de Référence de la Bibliothèque:
Les Tuples sont construits par la virgule
opérateur (pas dans les crochets),
avec ou sans trouvant entre parenthèses,
mais un tuple vide doit avoir la
se trouvant entre parenthèses, tels que a, b, c
ou (). Un seul élément d'un tuple doit avoir un
virgule, tels que (d,).
Les fonctions doivent servir un but unique
Par conséquent, ils devraient retourner un objet unique. Dans votre cas, cet objet est un n-uplet. Envisager tuple ad-hoc composé de structure de données. Il y a des langues où presque chaque fonction renvoie plusieurs valeurs (liste en Lisp).
Parfois, il suffit de retourner (x, y)
au lieu de Point(x, y)
.
Nommé tuples
Avec l'introduction de uplets nommé dans la version 2.6 de Python, il est préférable dans de nombreux cas, pour revenir uplets nommé à la place de la plaine des n-uplets.
>>> import collections
>>> Point = collections.namedtuple('Point', 'x y')
>>> x, y = Point(0, 1)
>>> p = Point(x, y)
>>> x, y, p
(0, 1, Point(x=0, y=1))
>>> p.x, p.y, p[0], p[1]
(0, 1, 0, 1)
>>> for i in p:
... print(i)
...
0
1