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

  • CorridorDigital

    CorridorDigi

    17 Mayıs 2010
  • Learn Math Tutorials

    Learn Math T

    20 Kasım 2011
  • Mark Halberstadt

    Mark Halbers

    19 ŞUBAT 2010