On 2019-02-03 22:58, David Mertz wrote:
     >>> len(v)  # Number of elements in the Vector `v`


Agreed, this should definitely be the behavior.  So how do we get a vector of lengths of each element?

     >>> # Compute the length of each element of the Vector `v`
     >>> v.apply(len)
     >>> v @ len


Also possible is:

     v.len()

We couldn't do that for every possible function, but this one is special inasmuch as we expect the items each to have a .__len__() but don't want to spell the dunders. Likewise for just a handful of other methods/functions.

The key different though is that *I* would want to a way to use both methods already attached to the objects/items. in a vector and also a generic user-provided function that operates on the items. I guess you disagree about "method pass-through" but it reads more elegantly to me:

     >>> # Replace all "a" by "b"
     >>> v.apply(lambda s: s.replace("a", "b"))
     >>> v @ (lambda s: s.replace("a", "b"))


Compare these with:

     v.replace("a", "b")

Since we already know v is a Vector, we kinda expect methods to be vectorized.  This feels like the "least surprise" and also the least extra code.  Moreover, spelling chained methods with many .appy() calls (even if spelled '@') feels very cumbersome:

Do they need multiple uses of apply and @?

(A) v.apply(lambda s: s.replace("a", "b")).apply(str.upper).apply(lambda s: s.count("B"))
>
v.apply(lambda s: s.replace("a", "b").upper().count("B"))

(B) v @ lambda s: s.replace("a", "b") @ str.upper  @ lambda s: s.count("B")

v @ lambda s: s.replace("a", "b").upper().count("B")

(C) v.replace("a","b").upper().count("B")

Between these, (C) feels a heck of a lot more intuitive and readable to me.

[snip]
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to