在python中,一行上的多个`with`语句是否等同于嵌套的`with`语句?

问题描述 投票:6回答:3

这两个陈述是否相同?

with A() as a, B() as b:
  # do something

with A() as a:
  with B() as b:
    # do something

我问,因为ab都改变了全局变量(tensorflow)和b取决于a所做的改变。所以我知道第二种形式可以安全使用,但是它相当于将它缩短到第一种形式吗?

python with-statement
3个回答
9
投票

是的,根据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中出现了完全相同的语言。


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

0
投票

完全相同。只是取决于您的个人喜好。

© www.soinside.com 2019 - 2024. All rights reserved.