'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
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.
Nedir (fonksiyonel) reaktif programlam...
Yapısal programlama ve fonksiyonel pro...
Tam olarak Huzurlu programlama nedir?...
(Ya da ihmal) kullanmak için zaman var...
Fonksiyonel Programlama GoF Tasarım De...