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

  • HowcastTechGadgets

    HowcastTechG

    22 EYLÜL 2010
  • Mega64

    Mega64

    24 ŞUBAT 2006
  • Shameless Maya

    Shameless Ma

    24 Mayıs 2012