这两个陈述是否相同?
with A() as a, B() as b:
# do something
with A() as a:
with B() as b:
# do something
我问,因为a
和b
都会改变全局变量(此处为张量流),b
取决于a
所做的更改。所以我知道第二种形式可以安全使用,但它是否相当于将它缩短为第一种形式?
答案 0 :(得分:9)
是的,根据Python 2.7 language reference,在一行中列出多个with
语句与嵌套它们完全相同:
如果有多个项目,则会处理上下文管理器,就像多个with语句嵌套一样:
with A() as a, B() as b: suite
相当于
with A() as a: with B() as b: suite
Python 3 language reference中出现完全相同的语言。
答案 1 :(得分:1)
正如其他人所说,它的结果相同。以下是有关如何使用此语法的更详细示例:
blah.txt
1
2
3
4
5
我可以打开一个文件,并以简洁的方式将其内容写入另一个文件:
with open('blah.txt', 'r') as infile, open('foo.txt', 'w+') as outfile:
for line in infile:
outfile.write(str(line))
foo.txt 现在包含:
1
2
3
4
5
答案 2 :(得分:0)
完全相同。只取决于您的个人偏好。