这两种说法是否等价?
with A() as a, B() as b: # do something with A() as a: with B() as b: # do something
我问这个问题是因为a和b都改变了全局变量(这里是tensorflow),而b依赖于a所做的更改。所以我知道第二种形式是安全的,但它相当于缩短到第一种形式吗?
a
b
2uluyalo1#
是的,根据Python 2.7语言参考,在一行中列出多个with语句与嵌套它们完全相同:对于多个项,上下文管理器的处理方式就像嵌套了多个with语句一样:
with
with A() as a, B() as b: suite
相当于
with A() as a: with B() as b: suite
类似的语言出现在Python 3语言参考中。
更新3.10+
在版本3.10中更改:支持使用分组括号将语句分到多行。
with ( A() as a, B() as b, ): SUITE
gfttwv5a2#
正如其他人所说,结果是一样的。下面是一个更详细的示例,说明如何使用此语法:
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))
nqwrtyyt3#
完全相同。这取决于你的个人偏好。
kqlmhetl4#
对于那些使用< python 3.9的用户,您仍然可以使用\将它们拆分为多行,尽管这看起来可能不如使用分组括号。
\
with A() as a, \ B() as b, \ C() as c: suite
4条答案
按热度按时间2uluyalo1#
是的,根据Python 2.7语言参考,在一行中列出多个
with
语句与嵌套它们完全相同:对于多个项,上下文管理器的处理方式就像嵌套了多个with语句一样:
相当于
类似的语言出现在Python 3语言参考中。
更新3.10+
在版本3.10中更改:支持使用分组括号将语句分到多行。
gfttwv5a2#
正如其他人所说,结果是一样的。下面是一个更详细的示例,说明如何使用此语法:
我可以以简洁的方式打开一个文件并将其内容写入另一个文件:
nqwrtyyt3#
完全相同。这取决于你的个人偏好。
kqlmhetl4#
对于那些使用< python 3.9的用户,您仍然可以使用
\
将它们拆分为多行,尽管这看起来可能不如使用分组括号。