On Sat, Feb 02, 2019 at 06:08:24PM -0500, David Mertz wrote:
In terms of other examples:
map(str.upper, seq) uppercases each item map(operator.attrgetter('name'), seq) gets the name attribute of each item map(lambda a: a*2, seq) doubles each item
Now compose those operations:
((seq .* 2)..name)..upper()
# Gag me with a spoon! map(str.upper, map(operator.attrgetter('name'), map(lambda a: a*2, seq)))
The comprehension version isn't awful:
[(a*2).name.upper() for a in seq]
but not all vectorized operations can be written as a chain of calls on a single sequence.
There are still some open issues that I don't have good answers for.
Consider ``x .+ y``. In Julia, I think that the compiler has enough type information to distinguish between the array plus scalar and array plus array cases, but I don't think Python will have that. So possibly there will still be some runtime information needed to make this work.
The dot arguably fails the "syntax should not look like grit on Tim's monitor" test (although attribute access already fails that test). I think the double-dot syntax looks like a typo, which is unfortunate.