絶対に(あなたが提供した例のために)。
タプルは 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(iterable)
関数は単一の目的を果たす必要があります
したがって、単一のオブジェクトを返す必要があります。あなたの場合、このオブジェクトはタプルです。タプルをアドホックな複合データ構造と考えてください。ほとんどすべての単一関数が複数の値を返す言語があります (Lisp のリスト)。
(x, y)
の代わりにreturn で十分な場合もあり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