[Python-ideas] Adding "Typed" collections/iterators to Python
Ethan Furman
ethan at stoneleaf.us
Mon Dec 19 21:09:25 CET 2011
Nathan Rice wrote:
> On Mon, Dec 19, 2011 at 1:01 PM, Ethan Furman <ethan at stoneleaf.us> wrote:
>> Nathan Rice wrote:
>>> [[1, 2], [3, 4], [5, 6]] could serve as an alternate
>>> example of why you can't directly map child methods with the same
>>> names.
>>
>> If you have to change the names, doesn't that negate the ability of "a
>> reliable method to make functions operate on both scalar and
>> vector values"?
>
> To clarify...
>
> Functions could reliably support both vector and scalar context, by
> checking that a type contract exists.
That sounds like type checking, which is not Pythonic. Duck-typing, on
the other hand, *is*.
def capitalize_me(some_obj):
some_obj = some_obj.capitalize()
--> capitalize_me("a simple string")
"A simple string"
--> capitalize_me(["a", "list", "of", "strings"])
["A", "List", "Of", "Strings"]
> Because of the name clash between parent and elementwise member
> methods when dealing with collections of collections (and some other
> classes), if the type contract provided "broadcast" versions of child
> methods, they would have to be provided with under an alias, perhaps X
> -> elementwise_X. I do not think people should be able to be
> oblivious of when they are calling collection and member methods, that
> encourages sloppy programming. I like the broadcast feature because
> it makes it easier to write code in a clear left to right narrative
> style, and that seems very pythonic to me compared with an
> "inside-out" style.
Duck-typing is neither oblivious, nor sloppy -- at least, not
inherently. Is my sample code above not what you had in mind?
~Ethan~
More information about the Python-ideas
mailing list