On Wed, Sep 4, 2019 at 1:15 PM Andrew Barnert via Python-ideas
<python-ideas@python.org> wrote:
>
> On Sep 3, 2019, at 19:45, Steven D'Aprano <st...@pearwood.info> wrote:
> >
> > On Thu, Aug 29, 2019 at 06:20:55PM +0100, Rob Cliffe via Python-ideas wrote:
> >
> >>> isinstance(x, str | int) ==> "is x an instance of str or int"
> >>
> >> Er, is that necessary when you can already write
> >> isinstance(x, (str, int))
> >
> > It's not *necessary* it's just nicer.
>
> Definitely. It reads even more like what it means than the existing spelling, 
> and it’s something novices are almost certain to expect to work, and so on.
>
> But that implies that you can also write this:
>
>     isinstance(x, Union[str, int])
>
> … because, after all, str|int is defined as meaning exactly that. Which 
> implies that the current rule that instantiated genetic types cannot be used 
> for runtime type checks needs to be changed.
>
> That’s certainly plausible, and maybe reasonable. But as I understand it, the 
> idea that there things can’t be used for runtime type checks was a 
> fundamental guiding principle to the typing design. So, it’s not something to 
> be changed lightly. Someone has to go back to the reason for that principle 
> (which may not be clearly stated anywhere, in which case it has to be 
> extracted from things that _have_ been argued), and then make the case for 
> why it should be violated here. And I haven’t seen anyone make that case. (If 
> someone has and I missed it, apologies; chunks of this thread keep getting 
> flagged as spam for some reason…)

I dislike runtime behavior of static types because I am very afraid accidental
large performance or memory footprint regression.

ABC has extension module for speedup, but `isinstance([], Iterable)` is
4x slower than `isinstance([], (str, list)`.

```
$ python3 -m pyperf timeit -s 'from collections.abc import Iterable;
x=[]' -- 'isinstance(x, Iterable)'
.....................
Mean +- std dev: 280 ns +- 8 ns

$ python3 -m pyperf timeit -s 'x=[]; T=(str, list)' -- 'isinstance(x, T)'
.....................
Mean +- std dev: 73.1 ns +- 1.0 ns
```

Typing module doesn't have speedup extension.
I expect`isinstance([], Union[str, list])` will be much slower than
`isinstance([], (str, list))`.


Regards,
-- 
Inada Naoki  <songofaca...@gmail.com>
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/HHIAHG7MLOL2DP5NXK5OCWC5ENKWOAEW/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to