Hi, I don't know if someone has already suggested this before, but here
goes:

With expressions allow using the enter/exit semantics of the with statement
inside an expression context. Examples:

    contents = f.read() with open('file') as f #the most obvious one
    multiplecontents = [f.read() with open(name) as f for name in names]
#reading multiple files

I don't know if it's worth making the "as NAME" part of the with mandatory
in an expression - is this a valid use case?

    data = database.selectrows() with threadlock

Where this would benefit: I think the major use case is `f.read() with
open('file') as f`. Previous documentation has suggested
`open('file').read()` and rely on garbage collection; as the disadvantages
of that became obvious, it transitioned to a method that couldn't be done
in an expression:

    with open('file') as f:
        contents = f.read()

Therefore `f.read() with open('file') as f`, I think, would be much
welcomed as the best way to read a file in an expression.

For those wondering about the scope semantics of the "as NAME", I think
they would be identical to the scope semantics of the "for" expression -
i.e. these are legal:

    contents = f.read() with open('file') as f
    grid = [[i] * 4 for i in range(4)]

But these are not:

    contents = f.read() with open('file') as f
    f.seek(0)
    grid = [[i] * 4 for i in range(4)]
    grid[i][i] = 4

Is this a good idea? Are there some subtleties I've failed to explain?
Please let me know.

Sharing,
Ken Hilton
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to