Are these two statements equivalent?
with A() as a, B() as b:
# do something
with A() as a:
with B() as b:
# do something
I ask because both a
and b
alter global variables (tensorflow here) and b
depends on changes made by a
. So I know the 2nd form is safe to use, but is it equivalent to shorten it to the 1st form?
Yes, listing multiple with
statements on one line is exactly the same as nesting them, according to the Python 2.7 language reference:
With more than one item, the context managers are processed as if multiple with statements were nested:
with A() as a, B() as b: suite
is equivalent to
with A() as a: with B() as b: suite
Similar language appears in the Python 3 language reference.
Update for 3.10+
Changed in version 3.10: Support for using grouping parentheses to break the statement in multiple lines.
with ( A() as a, B() as b, ): SUITE