SORU
28 NİSAN 2012, CUMARTESİ


'pythonic' eşdeğer 'kat' fonksiyonel programlama işlevi nedir?

Ne, Haskell: aşağıdaki gibi bir şey elde etmek için en aptalca yolu

foldl ( ) 0 [1,2,3,4,5]
--> 15

Ya Ruby eşdeğer:

[1,2,3,4,5].inject(0) {|m,x| m   x}
#> 15

Belli ki, Python sağlar reduce işlevi olan bir uygulama kat, tam olarak yukarıdaki gibi, ancak, ben söyledim 'pythonic' yol programlaması önlemek için lambda şartlar ve daha yüksek dereceden fonksiyonlar, tercih listesi-kapsam mümkünse. Bu nedenle, reduce işlevi olmadığını katlanır bir liste veya liste gibi Python yapısı ile tercih edilen bir yolu yoktur, ya da reduce Bu ulaşmanın deyimsel bir yolu mu?

CEVAP
28 NİSAN 2012, CUMARTESİ


Bir dizi toplamak en Pythonic yol sum. Diğer amaçlar için, bazen reduce operator Bu modül, örneğin bazı kombinasyonunu kullanabilirsiniz

def product(xs):
    return reduce(operator.mul, xs, 1)

reduce aslında Haskell açısından foldl, unutmayın. Kıvrımlar gerçekleştirmek için özel bir sözdizimi vardır hayır foldr, yerleşik var ve aslında-ilişkili olmayan operatörler ile reduce kullanarak kabul kötü bir üslup.

Üst düzey fonksiyonları oldukça pythonic; Python iyi kullanır kullanarak her bir nesne, fonksiyonlar ve sınıflar da dahil olmak üzere bir ilke. Lambda bazı Pythonistas tarafından hoş karşılanmaz, ama çoğunlukla karmaşık geldiklerinde çok okunabilir değil eğilimindedir çünkü haklısın.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BASS212M

    BASS212M

    15 Temmuz 2009
  • humanHardDrive

    humanHardDri

    16 Mart 2011
  • Missouri Star Quilt Company

    Missouri Sta

    18 ŞUBAT 2009