Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,一行上的多个`with`语句是否等同于嵌套的`with`语句?_Python_With Statement - Fatal编程技术网

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

在python中,一行上的多个`with`语句是否等同于嵌套的`with`语句?,python,with-statement,Python,With Statement,这两种说法相等吗 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语句一样: w

这两种说法相等吗

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语句一样:

with A() as a, B() as b:
    suite
相当于

with A() as a:
    with B() as b:
        suite

完全相同的语言出现在中。

完全相同。这取决于你的个人喜好。

正如其他人所说,这是同样的结果。下面是如何使用此语法的更详细示例:

blah.txt

我可以以简洁的方式打开一个文件并将其内容写入另一个文件:

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

我喜欢这个例子,也很欣赏。然而,我觉得有点不得不指出,在这种情况下,打开
blah
foo
的顺序实际上并不重要,因此与示例的要点背道而驰。@DavidParks我从来没有说过打开任何一个文件的顺序会重要。您可以先打开
outfile
,然后再打开
infile
。。。不管你想做什么。我提供了一个示例来演示此语法如何以非常可读的方式完成上述任务。“例子的要点”并没有失败。同意,这是一个很好的相关例子,我的问题特别是针对订单的,这就是我为什么要评论的原因。但作为一个关于它如何工作的一般观点,我相信它将是一个有用的参考,其他人可能会偶然发现这一点,所以感谢您花时间添加它@纳宾:如果有任何区别的话,那将是非常微小的。Python不是为微优化而设计的,所以任何差异在实践中都无关紧要。恕我直言,我不希望拥有18.8k的人会这么说。我总是在python中寻找最佳的代码。@Nabin:你这样做是错误的。Python是一种缓慢的高级语言。微观优化是时间的净损失。不管怎样,我尝试将这两个版本放入
dis.dis()
,它们生成了相同的字节码。这不是答案,而是更多的注释
1
2
3
4
5