Kesinlikle (verdiğiniz örnek için).
Tuples, Python'da birinci sınıf vatandaşlardır
divmod()
Tam olarak bunu yapan yerleşik bir işlev var.
q, r = divmod(x, y)
Başka örnekler de vardır: 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()))
BTW, çoğu zaman parantez gerekli değildir. Python Kitaplığı Referansından Alıntı :
Tuplelar birkaç şekilde oluşturulabilir:
- Boş demeti belirtmek için bir çift parantez kullanma: ()
- Tekli bir demet için sondaki virgül kullanma: a, veya (a,)
- Öğeleri virgülle ayırma: a, b, c veya (a, b, c)
- Tuple () yerleşik olarak kullanma: tuple () veya tuple (yinelenebilir)
Fonksiyonlar tek bir amaca hizmet etmelidir
Bu nedenle tek bir nesne döndürmeleri gerekir. Sizin durumunuzda bu nesne bir demettir. Demeti geçici bir bileşik veri yapısı olarak düşünün. Hemen hemen her işlevin birden çok değer döndürdüğü diller vardır (Lisp'te liste).
Bazen (x, y)
yerine dönmek yeterlidir Point(x, y)
.
Adlandırılmış gruplar
Python 2.6'da adlandırılmış tupleların kullanılmaya başlanmasıyla birlikte, çoğu durumda düz demetler yerine adlandırılmış tuple'ları döndürmek tercih edilir.
>>> 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