On Feb 8, 2020, at 13:25, Chris Angelico email@example.com wrote:
On Sun, Feb 9, 2020 at 8:04 AM Random832 firstname.lastname@example.org wrote:
On Fri, Feb 7, 2020, at 13:03, Todd wrote: approaches like opening within the dump or load, which the wiki still recommends .
So something like:
with open('myfile.p', 'wb') as f: pickle.dump(myobj, f)
What if you could write pickle.dump(myobj, with open('myfile.p', 'wb'))?
Or other similar examples such as (with open('myfile')).read() - have the compiler automatically transform the code into equivalent to wrapping the statement in a with block.
Exactly how much code would be wrapped in the 'with' block?
I think the answer there is pretty obvious: it can only be the entire statement that the with expression is contained in.
That does raise an issue for lambdas and comprehensions. I think for that case, you need to stop thinking of it as a syntactic transformation and instead think of the semantics directly: the with affects the innermost scope if it’s smaller than the innermost statement, even though there’s no way to rewrite it like that. But then nothing else in Python is defined as a syntactic rewrite, so I don’t think that’s a problem.