Join GitHub today
GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.
Sign upbpo-39320: Fix changes in the evaluation logic of unpacking operations. #18264
Conversation
This comment has been minimized.
This comment has been minimized.
codecov
bot
commented
Jan 30, 2020
Codecov Report
@@ Coverage Diff @@
## master #18264 +/- ##
===========================================
+ Coverage 82.12% 83.19% +1.07%
===========================================
Files 1955 1570 -385
Lines 588723 414212 -174511
Branches 44383 44401 +18
===========================================
- Hits 483465 344607 -138858
+ Misses 95630 59966 -35664
- Partials 9628 9639 +11
Continue to review full report at Codecov.
|
This comment has been minimized.
This comment has been minimized.
According to https://docs.python.org/3/reference/expressions.html#evaluation-order expressions within a list are evaluated left to right. So, In the expression The same rationale applies to |
This comment has been minimized.
This comment has been minimized.
I don't think I agree.
Absolutely, 100%. And in "Unary I think one of the examples in the link you provided is the most clarifying here:
Note that the stars are not part of expressions 1-5, but are a part of the top-level call expression that operates on them all. |
brandtbucher commentedJan 30, 2020
•
edited
Commits 13bc139 and 8a4cd70 introduced subtle changes in the evaluation logic of unpacking operations. Previously, all elements were evaluated prior to being collected in a container. Now, these operations are interleaved.
For example, the code
[*foo, print("XXX")]
used to print "XXX" before callingfoo.__iter__
. This is no longer the case.I've included several similar regression tests in this PR. @markshannon, your intuition about keeping the opargs for the
DICT_UPDATE
/DICT_MERGE
ops was good.https://bugs.python.org/issue39320