Absolut (für das von Ihnen angegebene Beispiel).
Tupel sind erstklassige Bürger in Python
Es gibt eine eingebaute Funktion divmod()
, die genau das tut.
q, r = divmod(x, y) # ((x - x%y)/y, x%y) Invariant: div*y + mod == x
Es gibt andere Beispiele: 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()))
Übrigens sind Klammern meistens nicht erforderlich. Zitat aus der Python-Bibliothek Referenz :
Tupel können auf verschiedene Arten konstruiert werden:
- Verwenden Sie ein Paar Klammern, um das leere Tupel zu kennzeichnen: ()
- Verwenden eines nachgestellten Kommas für ein Singleton-Tupel: a oder (a,)
- Trennen von Elementen durch Kommas: a, b, c oder (a, b, c)
- Verwenden des integrierten tuple (): tuple () oder tuple (iterable)
Funktionen sollten einem einzigen Zweck dienen
Daher sollten sie ein einzelnes Objekt zurückgeben. In Ihrem Fall ist dieses Objekt ein Tupel. Betrachten Sie Tupel als eine zusammengesetzte Ad-hoc-Datenstruktur. Es gibt Sprachen, in denen fast jede einzelne Funktion mehrere Werte zurückgibt (Liste in Lisp).
Manchmal reicht es aus, (x, y)
statt zurückzukehren Point(x, y)
.
Benannte Tupel
Mit der Einführung benannter Tupel in Python 2.6 ist es in vielen Fällen vorzuziehen, benannte Tupel anstelle von einfachen Tupeln zurückzugeben.
>>> 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