假设您有三个通过上下文管理器获取的对象,例如A锁,数据库连接和ip套接字.您可以通过以下方式获取它
with lock:
with db_con:
with socket:
#do stuff
Run Code Online (Sandbox Code Playgroud)
但有没有办法在一个街区内完成?就像是
with lock,db_con,socket:
#do stuff
Run Code Online (Sandbox Code Playgroud)
此外,如果有一组具有上下文管理器的未知长度的对象,是否有可能以某种方式做到:
a=[lock1, lock2, lock3, db_con1, socket, db_con2]
with a as res:
#now all objects in array are acquired
Run Code Online (Sandbox Code Playgroud)
如果答案是"不",是不是因为需要这样的功能意味着设计不好,或者我应该建议它?:-P
我喜欢withPython 2.7中多重上下文语句的便利性:
with open('a.txt') as a, open('b.txt') as b:
do_many_amazing_things(a, b)
Run Code Online (Sandbox Code Playgroud)
但是,我需要保持与2.6的兼容性.
with被带到2.5通过__future__,但我无法找到任何关于在文档中反向移植到2.6的多个上下文版本.
我错过了什么吗?
编辑:我知道可以嵌套with语句.我在问是否可以使用多个with语句.