Birden çok değer döndürmek için bir işlev için pythonic?
Python, bir fonksiyon birden fazla değer geri alabilirsin. İşte yapmacık bir örnek:
def divide(x, y):
quotient = x/y
remainder = x % y
return quotient, remainder
(q, r) = divide(22, 7)
Bu çok yararlı gibi görünüyor, ama aynı zamanda ("X..bir ara değer olarak ihtiyacımız olan şey zaten işlevini hesaplar. istismar olabilir gibi görünüyor X dönüş değeri de").
Ne zaman çizgi çizmek ve farklı bir yöntem tanımlamak gerekir?
CEVAP
Kesinlikle (örneğin verdiğiniz).
Python dizilerini birinci SINIF VATANDAŞTIR
Tam olarak bunu yapan 14* *yerleşik bir işlevi yoktur.
q, r = divmod(x, y) # ((x - x%y)/y, x%y) Invariant: div*y mod == x
Başka örnekler de var: , *, dict.items
*enumerate
7.
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()))
BTW, parantez gerekli çoğu zaman. Python Library Reference ' dan alıntı:
Dizilerini virgül kullanılarak inşa edilir operatör(köşeli parantez içinde), ya da çevreleyen parantezler olmadan, ama boş bir dizi olmalı çevreleyen parantezler, a, b, c gibi veya (). Tek bir öğe bir başlık olmalı virgül, bu (d) gibi.
Fonksiyonları tek bir amaca hizmet etmeli
Bu nedenle tek bir nesneyi döndürmek gerekir. Senin durumunda bu nesne bir demet. Ad-hoc bileşik veri yapısı bir dizi olarak düşünün. Neredeyse her fonksiyon birden fazla değer (Lisp listesinde) verir dilleri vardır.
Bazen Point(x, y)
yerine (x, y)
dönüş için yeterlidir.
Dizilerini adında
Python 2.6 adlı dizilerini tanıtımı ile iade dizilerini yerine düz dizilerini adlı birçok durumda 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
Herhangi bir pythonic yol iki dicts (h...
Nasıl Clojure içinde işlev bağımsız de...
Nasıl WPF tek bir Dize için birden çok...
Nasıl bir işlev tanımlamak için birden...
C formdan bir değer döndürmek için nas...