[Python-ideas] issubclass(collections.OrderedDict, collections.Sequence)

Ram Rachum ram at rachum.com
Tue Oct 7 22:27:50 CEST 2014


Ah, perhaps I haven't explained clearly enough.

I did not mean that the result of `isinstance(x, Ordered)` would be somehow
determined by the canonical order in my combinatorics package (which would
be absurd as my package is just my own thing and shouldn't affect a type in
`collections`). I meant that my combinatorics package, when asked whether a
certain iterable belongs in a combination space, would check its order only
if the iterable type is `Ordered`. (i.e. it's communicating "my order is
meaningful".)

For example, someone could have a combination space "3 items taken from
range(5)", which has members like (0, 1, 2) and (1, 3, 4), but not (4, 2,
1) because it's not in canoncial order. If someone were to check `(4, 2, 1)
in comb_space` he should get `False`, but if he's checking `{1, 2, 4} in
comb_space` he should get `True`, regardless of iteration order, because
it's a `set` which isn't supposed to be ordered so it's assumed the user is
not asking a question about order.

On Tue, Oct 7, 2014 at 11:20 PM, Guido van Rossum <guido at python.org> wrote:

> But your use case (as I understand it) requires that the iteration order
> is the same as the canonical order that your app defines.
>
> On Tue, Oct 7, 2014 at 1:13 PM, Ram Rachum <ram at rachum.com> wrote:
>
>> You're right, I didn't think of that case. So the best definition I can
>> come up with is: "The iteration order is defined and meaningful, and not
>> random." Is this specific enough? I know it's something which isn't
>> testable programmatically (same as `tuple(x) == tuple(x)` which is
>> impractical to test.)
>>
>>
>> On Tue, Oct 7, 2014 at 11:10 PM, Alexander Belopolsky <
>> alexander.belopolsky at gmail.com> wrote:
>>
>>>
>>> On Tue, Oct 7, 2014 at 4:01 PM, Ram Rachum <ram at rachum.com> wrote:
>>>
>>>> you asked for the meaning of when something is ordered. Ed answered
>>>> something and I said I meant exactly what he said, but maybe I should have
>>>> been more explicit: I meant that it's guaranteed that `tuple(x) ==
>>>> tuple(x)`.
>>>
>>>
>>> I don't think this is a very useful definition:
>>>
>>> >>> x = iter('abc')
>>> >>> tuple(x) == tuple(x)
>>> False
>>> >>> x = set('abc')
>>> >>> tuple(x) == tuple(x)
>>> True
>>>
>>>
>>>
>>
>
>
> --
> --Guido van Rossum (python.org/~guido)
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20141007/763278c9/attachment-0001.html>


More information about the Python-ideas mailing list