这两个陈述是否相同?
with A() as a, B() as b:
# do something
with A() as a:
with B() as b:
# do something
我问,因为a
和b
都改变了全局变量(tensorflow)和b
取决于a
所做的改变。所以我知道第二种形式可以安全使用,但是它相当于将它缩短到第一种形式吗?
是的,根据with
,在一行上列出多个Python 2.7 language reference语句与嵌套它们完全相同:
如果有多个项目,则会处理上下文管理器,就好像多个with语句嵌套一样:
with A() as a, B() as b: suite
相当于
with A() as a: with B() as b: suite
在Python 3 language reference中出现了完全相同的语言。
正如其他人所说,这是相同的结果。以下是如何使用此语法的更详细示例:
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
完全相同。只是取决于您的个人喜好。