On Mon, May 2, 2016 at 11:41 PM, MRAB firstname.lastname@example.org wrote:
On 2016-05-02 14:57, Koos Zevenhoven wrote:
On Mon, May 2, 2016 at 3:44 PM, Alexander Walters wrote:
with open(foo), open(bar): .write(baz) # does what?
Hopefully it would raise an exception, even though, in the spirit of May 1st, it would pick one of the two files at random ;-).
Anyway, the exception (or warning?) could be raised at compile-time if the leading-dot form was used in a 'with' that had more than one expression.
Exactly. A SyntaxError perhaps?
So, if a single-expression with-statement would allow dot-attribute syntax for referring to attributes of the value, like in my previous example:
with open(filename, 'w'): #do stuff .write(stuff) #more stuff .write(stuff)
Then, if one introduces something roughly as follows:
import contextlib @contextlib.contextmanager def implicit(obj): yield obj
It would also allow one to do things like:
with implicit(food): meal = .spam + .eggs + .cheese
# meal = food.spam + food.eggs + food.cheese
with implicit(self): .foo = foo # self.foo = foo .bar = bar # self.bar = bar
This would be very explicit about what is implicit :).
This way, the required addition to the with statement would indeed not change the meaning of 'with' (or mix it with different meanings). The only(?) addition would be .attr access to attributes of the object "yielded" by the context manager.