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

时间:2017-03-31 01:33:05

标签: python with-statement

这两个陈述是否相同?

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

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

我问,因为ab都会改变全局变量(此处为张量流),b取决于a所做的更改。所以我知道第二种形式可以安全使用,但它是否相当于将它缩短为第一种形式?

3 个答案:

答案 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)

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