Абсолютно (для приведенного вами примера).
Кортежи являются первоклассными гражданами в Python
Существует встроенная функция divmod()
, которая делает именно это.
q, r = divmod(x, y) # ((x - x%y)/y, x%y) Invariant: div*y + mod == x
Существуют и другие примеры: 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()))
Кстати, скобки в большинстве случаев не нужны.
Цитата из Справочник по библиотеке Python :
Кортежи могут быть построены несколькими способами:
- Использование пары скобок для обозначения пустого кортежа: ()
- Использование запятой для одиночного кортежа: a или (a,)
- Разделение элементов запятыми: a, b, c или (a, b, c)
- Использование встроенного tuple (): tuple () или tuple (итерируемый)
Функции должны служить одной цели
Поэтому они должны вернуть один объект. В вашем случае этот объект является кортежем. Рассмотрим кортеж как специальную составную структуру данных. Существуют языки, в которых почти каждая функция возвращает несколько значений (список в Лиспе).
Иногда достаточно вернуть (x, y)
вместо Point(x, y)
.
Именованные кортежи
С введением именованных кортежей в Python 2.6 во многих случаях предпочтительно возвращать именованные кортежи вместо простых кортежей.
>>> 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