SORU
14 EYLÜL 2008, Pazar


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
14 EYLÜL 2008, Pazar


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*enumerate7.

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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • boniver

    boniver

    17 NİSAN 2006
  • gsmaestro

    gsmaestro

    17 AĞUSTOS 2006
  • Snazzy Labs

    Snazzy Labs

    9 Aralık 2008