> Sent: Wednesday, September 13, 2017 at 11:23 AM
> From: "Edward Minnix" <[email protected]>
> To: "Jason H" <[email protected]>
> Cc: Python-Ideas <[email protected]>
> Subject: Re: [Python-ideas] Make map() better
>
> While I agree that the method calling syntax is nicer, I disagree with
> flipping the argument error for three main reasons.
>
> First: it violates the signature entirely
> The signature to map is map(function, *iterables). Python’s map is more like
> Haskell’s zipWith. Making the function last would either ruin the signature
> or would slow down performance.
>
> Second: currying
> If you ever curry a function in Python using functools.partial, having the
> most common arguments first is crucial. (You’re more likely to apply the same
> function to multiple iterables than to apply several functions on the same
> exact iterable).
>
> Thirdly: the change would make several functional programming packages have
> incompatible APIs.
> Currently libraries like PyToolz/Cytoolz and funcy have APIs that require
> function-first argument order. Changing the argument order would be
> disruptive to most Python FP packages/frameworks.
>
> So while I agree with you that “iterable.map(fn)” is more readable, I think
> changing the argument order would be too much of a breaking change, and there
> is no practical way to add “iterable.map(fn)” to every iterable type.
Thanks for the insights.
I don't think it would be that breaking:
def remap_map(a1, a2):
if hasattr(a1, '__call__'):
return map(a1, a2)
elif hasattr(a2, '__call__'):
return map(a2,a1)
else:
raise NotCallable # Exception neither is callable
I'm rather surprised that there isn't a Iterable class which dict and list
derive from.
If that were added to just dict and list, I think it would cover 98% of cases,
and adding Iterable would be reasonable in the remaining scenarios.
_______________________________________________
Python-ideas mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/