Absolutamente (para el ejemplo que proporcionó).
Las tuplas son ciudadanos de primera clase en Python
Hay una función incorporada divmod()
que hace exactamente eso.
q, r = divmod(x, y)
Hay otros ejemplos: zip
, enumerate
, dict.items
.
for i, e in enumerate([1, 3, 3]):
print "index=%d, element=%s" % (i, e)
d = dict((v, k) for k, v in adict.items())
d = dict(zip(adict.values(), adict.keys()))
Por cierto, los paréntesis no son necesarios la mayor parte del tiempo. Cita de la referencia de la biblioteca de Python :
Las tuplas se pueden construir de varias formas:
- Usando un par de paréntesis para denotar la tupla vacía: ()
- Usando una coma final para una tupla singleton: a, o (a,)
- Separar elementos con comas: a, b, c o (a, b, c)
- Usando la tupla () incorporada: tupla () o tupla (iterable)
Las funciones deben tener un solo propósito
Por lo tanto, deben devolver un solo objeto. En su caso, este objeto es una tupla. Considere la tupla como una estructura de datos compuestos ad-hoc. Hay lenguajes en los que casi todas las funciones devuelven varios valores (lista en Lisp).
A veces es suficiente regresar en (x, y)
lugar de Point(x, y)
.
Tuplas con nombre
Con la introducción de tuplas con nombre en Python 2.6, en muchos casos es preferible devolver tuplas con nombre en lugar de tuplas simples.
>>> 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