Hello, On Sun, 6 Jan 2019 22:19:39 +1100 Chris Angelico <rosuav at gmail.com> wrote: > > It's clear that what happens there is that first None is stored to > > N, just to del it as the next step. Indeed, that's what done in the > > compile.c: > > > > https://github.com/python/cpython/blob/master/Python/compile.c#L2905 > > > > Storing None looks superfluous. > > > > There's no clear explanation why it's done like that, so probably an > > artifact of the initial implementation. > > With something as clearly deliberate as this, it's generally safe to > assume there's a good reason for it. Absolutely, and one doesn't need to look far for an example. For 20 years Python was devoid of ":=", then, suddenly... ;-). > But I would very much like to see > that reason documented, preferably with an example of something that > could otherwise fail. Yeah, I'm keen to know too! [] > > So, perhaps the change should be not removing "e = None" part, but > > conversely, removing the "del e" part. > > No, there's a good reason for having the "del e", and that's to > prevent reference loops So, I'm not sure if I made that clear, but the issue is that currently the generated code tries to break the reference loop *twice*. But once should be enough. And which one of "N = None" or "del N" is better is something to consider. -- Best regards, Paul mailto:pmiscml at gmail.com
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4