New submission from Batuhan Taskaya <[email protected]>:
PEP 526 classifies everything but simple, unparenthesized names (a.b, (a),
a[b]) as complex targets. The way the we handle annotations for them right now
is, doing literally nothing but evaluating every part of it (just pushing the
name to the stack, and popping, without even doing the attribute access);
$ cat t.py
foo[bar]: int
$ python -m dis t.py
1 0 SETUP_ANNOTATIONS
2 LOAD_NAME 0 (foo)
4 POP_TOP
6 LOAD_NAME 1 (bar)
8 POP_TOP
10 LOAD_NAME 2 (int)
12 POP_TOP
14 LOAD_CONST 0 (None)
16 RETURN_VALUE
$ cat t.py
a.b: int
$ python -m dis t.py
1 0 SETUP_ANNOTATIONS
2 LOAD_NAME 0 (a)
4 POP_TOP
6 LOAD_NAME 1 (int)
8 POP_TOP
10 LOAD_CONST 0 (None)
12 RETURN_VALUE
I noticed this while creating a patch for issue 42725, since I had to create an
extra check for non-simple annassign targets (because compiler tries to find
their scope, `int` in this case is not compiled to string).
Since they have no real side effect but just accessing a name, I'd propose we
drop this from 3.10 so that both I can simply the patch for issue 42725, and
also we have consistency with what we do when the target is simple (instead of
storing this time, we'll just drop the bytecode).
$ cat t.py
a.b: int = 5
$ python -m dis t.py
1 0 SETUP_ANNOTATIONS
2 LOAD_CONST 0 (5)
4 LOAD_NAME 0 (a)
6 STORE_ATTR 1 (b)
8 LOAD_NAME 2 (int)
10 POP_TOP
12 LOAD_CONST 1 (None)
14 RETURN_VALUE
8/10 will be gone in this case.
If agreed upon, I can propose a patch.
----------
components: Interpreter Core
messages: 383729
nosy: BTaskaya, gvanrossum, lys.nikolaou, pablogsal, serhiy.storchaka
priority: normal
severity: normal
status: open
title: PEP 563: drop annotations for complex assign targets
versions: Python 3.10
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue42737>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com