3 ms·
I know that they exist, but if you look at your examples, you have to manually cast maps into a list which is a bit strange coming from Ruby/JS/Scala. Once you
by rajangdavis 8y ago
I know that they exist, but if you look at your examples, you have to manually cast maps into a list which is a bit strange coming from Ruby/JS/Scala.
Once you have something sufficiently complex (such as using map, filter, and reduce all at the same time), there becomes so much line noise that it starts working against you.
With JS/Ruby/Scala, you chain functional methods as opposed to Python where you can keep wrapping functions.
Something like
let arr = [0,1,2,'test'];
arr
.filter(x => typeof(x) == 'number')
.map(x => x*2)
.reduce((x, y) => x * y)
becomes a little more cryptic with Python:
from functools import reduce
arr = [0,1,2,'test']
# with lambdas
reduce(lambda x,y: x + y, map(lambda x: x * 2, filter(lambda x: type(x) == int, arr)))
# list comprehension equivalent
sum([x * 2 for x in arr if type(x) == int])
While Python is very beginner friendly, it has a really strange (in my opinion) approach to functional concepts. However, it is has other features that make it really nice to work with (like decorators, data classes, sets, robust ML libraries, really nice built ins).
- naveen99 8y agoChaining function calls makes things harder to debug, so I don’t do it.
- rajangdavis 8y agoI don't think it's any harder than broadcasting... I try to avoid chaining unless I know the structure of the data I am working with.