【发布时间】:2015-09-11 09:23:40
【问题描述】:
在python中创建多行with的干净方法是什么?我想在单个with 中打开几个文件,但它足够向右,我希望它在多行上。像这样:
class Dummy:
def __enter__(self): pass
def __exit__(self, type, value, traceback): pass
with Dummy() as a, Dummy() as b,
Dummy() as c:
pass
不幸的是,这是一个SyntaxError。所以我尝试了这个:
with (Dummy() as a, Dummy() as b,
Dummy() as c):
pass
也是语法错误。但是,这行得通:
with Dummy() as a, Dummy() as b,\
Dummy() as c:
pass
但是如果我想发表评论怎么办?这不起作用:
with Dummy() as a, Dummy() as b,\
# my comment explaining why I wanted Dummy() as c\
Dummy() as c:
pass
\s 的位置也没有任何明显的变化。
有没有一种简洁的方法来创建一个允许在其中包含 cmets 的多行 with 语句?
【问题讨论】:
-
实际上,最大的问题是 PEP-8 对这些东西的看法,因为 PEP-8 将行长限制为 80 个字符,这就是这样做的必要性。
-
意见时间:PEP-8 很棒,但我认为 80 个字符的限制太低了。它基于旧的终端限制,而不是人类可用性。我不提倡300+字的台词,但120-130左右没问题。
-
@TigerhawkT3 我认为 80 个字符的限制也很低,但是当我处理需要同时打开 5 个文件的项目时,我看到了它的好处。能够查看每个文件要容易得多。不过,我可能会为这个文件做一个例外。
-
PEP-8 是explicitly ok,对于多行
with语句,带有` \ ` 行继续,因为你不能使用隐式继续。但是,如果您想内联 cmets,这对您的情况并没有真正的帮助。
标签: python python-3.x multiline with-statement