Python 2.6中的多个上下文`with`语句
我很喜欢Python 2.7中多个上下文的with
语句带来的便利:
with open('a.txt') as a, open('b.txt') as b:
do_many_amazing_things(a, b)
不过,我需要保持与2.6版本的兼容性。
with
语句是在2.5版本通过__future__
引入的,但我在文档中找不到关于多个上下文版本被移植到2.6的任何信息。
我是不是漏掉了什么?
补充:我知道可以嵌套with
语句。我是在问是否可以使用多个with
语句。
1 个回答
20
如果没有向后兼容的替代方案,我会通过把多个上下文的 with
语句变成一组单个上下文的嵌套 with
语句来处理。
with open('a.txt') as a:
with open('b.txt') as b:
do_many_amazing_things(a, b)
编辑以回应你的编辑:
如果你坚持不使用额外的嵌套 with
语句,你可以随时使用 contextlib
。
import contextlib
with contextlib.nested(open("a.txt"), open("b.txt")) as (a, b):
do_many_amazing_things(a,b)
至于使用从未来导入的 with
语句的多个 with
语句,按照我所知,这是不可能的。