[Python-ideas] Adding "Typed" collections/iterators to Python
Nick Coghlan
ncoghlan at gmail.com
Mon Dec 19 00:45:08 CET 2011
On Mon, Dec 19, 2011 at 9:28 AM, Nathan Rice
<nathan.alexander.rice at gmail.com> wrote:
> -- Performing a series of operations using comprehensions or map
> tends to be highly verbose in an uninformative way. Compare the
> current method with what would be possible using "typed" collections:
>
> L2 = [X(e) for e in L1]
> L3 = [Y(e) for e in L2]
> vs
> L2 = X(L1) # assuming X has been updated to work in both vector/scalar
> L3 = Y(L2) # context...
This use case is why map() remains a builtin, even in Python 3:
L2 = map(X, L1)
L3 = map(Y, L2)
Short, but explicit (no under-the-hood guessing about whether or not
something should be treated as a scalar or vector value - in the
general case, this distinction isn't as clear as you might think, just
look at strings).
> L2 = [Z(Y(X(e))) for e in L1]
> vs
> L2 = Z(Y(X(L1)))
def XYZ(arg):
"""Look, I can document what this means!"""
return Z(Y(X(arg)))
L2 = map(XYZ, L1)
> L2 = [e.X().Y().Z() for e in L1]
> vs
> L2 = L1.X().Y().Z() # assuming vectorized versions of member methods
> #are folded into the collection via the mixin.
def XYZ_methods(arg):
"""I can also document what *this* means"""
return arg.X().Y().Z()
L2 = map(XYZ_methods, L1)
> -- Because collections are type agnostic, it is not possible to place
> methods on them that are type specific. This leads to a lot of cases
> where python forces you to read inside out or a the syntax gets
> very disjoint in general. A good example of this is:
>
> "\n".join(l.capitalize() for l in my_string.split("\n"))
>
> which could reduce to something far more readable, such as:
>
> my_string.split("\n").capitalize().join_items("\n")
Another bad example, since that's just a really verbose way of writing
my_string.capitalize().
Short answer: what advantage does your proposal really offer over
simply extracting the repetitive operation out to a use case specific
function, and making effective use of the existing vectorisation
utilities (i.e. map() and itertools)?
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
More information about the Python-ideas
mailing list