Python 2.7 及更高版本允许您在一个中指定多个上下文管理器with
陈述:
with open("foo.txt") as foo, open("bar.txt", "w") as bar, open("baz.txt", "w") as baz:
# Read from foo, write different output to bar an baz
线路does太长,并且不能使用括号将其保持在 80 个字符以下。您可以使用\
然而反斜杠继续:
with open("foo.txt") as foo,\
open("bar.txt", "w") as bar,\
open("baz.txt", "w") as baz:
# Read from foo, write different output to bar an baz
或者您可以将换行符放在“open()”调用的括号内:
with open(
"foo.txt"
) as foo, open(
"bar.txt", "w"
) as bar, open(
"baz.txt", "w"
) as baz:
# Read from foo, write different output to bar an baz
从 Python 3.10 开始,通过添加以下内容,这变得更加容易对多项目上下文管理器的括号支持:
with (
open("foo.txt") as foo,
open("bar.txt", "w") as bar,
open("baz.txt", "w") as baz,
):
# Read from foo, write different output to bar an baz
另一种选择是使用contextlib.ExitStack()上下文管理器(仅适用于 Python 3.3 及更高版本):
from contextlib import ExitStack
with ExitStack() as stack:
foo = stack.enter_context(open("foo.txt"))
bar = stack.enter_context(open("bar.txt"))
baz = stack.enter_context(open("baz.txt"))