Absolutnie (na przykład podany przez Ciebie).
Krotki są obywatelami pierwszej klasy w Pythonie
Jest wbudowana funkcja divmod()
, która dokładnie to robi.
q, r = divmod(x, y)
Są też inne przykłady: 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()))
Przy okazji, nawiasy nie są potrzebne przez większość czasu. Cytat z Python Library Reference :
Krotki można konstruować na wiele sposobów:
- Używanie pary nawiasów do oznaczenia pustej krotki: ()
- Używanie końcowego przecinka dla krotki pojedynczej: a lub (a,)
- Oddzielanie elementów przecinkami: a, b, c lub (a, b, c)
- Korzystanie z wbudowanej tuple (): tuple () lub tuple (iterable)
Funkcje powinny służyć jednemu celowi
Dlatego powinny zwrócić pojedynczy obiekt. W twoim przypadku ten obiekt jest krotką. Traktuj krotkę jako złożoną strukturę danych ad hoc. Istnieją języki, w których prawie każda funkcja zwraca wiele wartości (lista w Lisp).
Czasami wystarczy wrócić (x, y)
zamiast Point(x, y)
.
Nazwane krotki
Wraz z wprowadzeniem nazwanych krotek w Pythonie 2.6 w wielu przypadkach preferuje się zwracanie nazwanych krotek zamiast zwykłych krotek.
>>> 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