If we want to avoid new operators, I think that the existing “from” keyword is 
also a good candidate:

if A from (B, C) and A from D:
    ...

I’m still skeptical of the value of this feature, though.

Brandt

> On Jun 19, 2019, at 08:56, Franklin? Lee <[email protected]> 
> wrote:
> 
> On Tue, Jun 18, 2019 at 5:01 AM Emin Bugra Saral via Python-ideas
> <[email protected]> wrote:
>> 
>> `<:` kind of notation would look more clear, I agree.
>> 
>> My proposition came after thinking the wording used in Python.
>> 
>> issubclass() - is subclass?
>> 
>> By definition, subclass reminds me set theory. 
>> https://en.wikipedia.org/wiki/Subclass_(set_theory) which also has a 
>> relativity with Subtyping as Guido pointed out.
>> 
>> And, we have operator support for set() as you can see here 
>> https://docs.python.org/3/library/stdtypes.html#set
>> `set <= other`
>> 
>> With this logic, since Python has its own way of being practical and 
>> predictable in some ways, I would except to have an operator like `<:`, 
>> which some other languages already possess.
>> 
>> A <: B against issubclass(A, B)  looks more elegant, and purpose driven 
>> syntax like most of other types.
>> 
>> I see that there is also `issubset` method which is equivalent to `set <= 
>> other`. Therefore I find this a little bit inconsistent that we don't apply 
>> the similar logic for issubclass.
> 
> Adding a new operator means more to learn for people reading code.
> It's difficult to search for operators, especially when you're new to
> Python.
> 
> The @ operator is less bad, in that it's (usually) specific to Numpy
> code, and it will be ubiquitous enough among Numpy users that they'll
> pick it up along the way (either in a tutorial or otherwise). Even if
> it were more bad, matrix multiplication is usually in complex-enough
> expressions that the new operator helps readability, and the costs are
> outweighed by the benefits. There is also a domain advantage, because
> the people reading and writing the expressions are used to expressing
> those lines using mathematical symbols.
> 
> For example,
>    A @ A.T @ v   +   B @ B.T @ v
> is better than
>    A.dot(A.T).dot(v).__add__(B.dot(B.T).dot(v))
> and it's easier to see that you can refactor the first as
>    (A @ A.T   +  B @ B.T) @ v
> than the second.
> 
> On the other hand, type comparison is NOT often used in the middle of
> complex expressions, because the result of a type comparison is bool,
> and you don't often do much arithmetic with bools. There isn't much
> chaining or nesting. The people reading and writing type expressions
> are general programmers, NOT mathematicians or scientists.
> 
> For example,
>    if (A <: B or A <: C) and A <: D:
> is not much better than
>    if issubclass(A, (B, C)) and issubclass(A, D):
> especially if you don't know what either of those mean. You can search
> for issubclass, but you can't search for <:.
> 
> To show that you really do need the feature, you need to show the
> complex expressions you write with issubclass that would be improved
> by using an operator.
> 
>> I don't know if we could achieve same performance of issubclass itself with 
>> the operator (I think we can) but even it's not the case, people who uses 
>> Python to write their scripts very fast, that would be a lovely addition.
> 
> I believe the performance cost will be negligible. A function call
> requires a lookup and a call. An operator requires one or more lookups
> and a call. However, the bigger cost will be in grabbing the MRO,
> iterating through it, and checking for virtual subclassing. You're
> also not going to be doing type comparisons in a huge loop.
> _______________________________________________
> Python-ideas mailing list -- [email protected]
> To unsubscribe send an email to [email protected]
> https://mail.python.org/mailman3/lists/python-ideas.python.org/
> Message archived at 
> https://mail.python.org/archives/list/[email protected]/message/3ZOPALWYFEY65QUMEEJPWBK3KLY6TCMG/
> Code of Conduct: http://python.org/psf/codeofconduct/
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/[email protected]/message/XGAYBS63ZBDQ2X7SZG5SQVW2IMDH265I/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to