Совершенно верно (для примера, который вы предоставили).
Кортежи - это первоклассные граждане в Python
Есть встроенная функция, divmod()
которая делает именно это.
q, r = divmod(x, y)
Есть и другие примеры: 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()))
Кстати, скобки в большинстве случаев не нужны. Цитата из справочника библиотеки 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