我在python中有一行代码:
with long_name_function(p) as a, other_long_name_function():
我希望在多行中打破它,因为太长了,我可以使用反斜杠,但它们被认为是一种不好的做法。我也可以使用contextlib.nested,但不推荐使用,还有其他选择吗?
答案 0 :(得分:22)
这忽略了问题的前提,但我实际上建议在这种情况下使用反斜杠:
with really_really_long_name_function(p) as f1, \
other_really_really_long_name_function() as f2:
pass
正如@JonClements所说,你不能在这种情况下使用括号或逗号,没有其他选择,所以反斜杠是要走的路,代码看起来很干净IMO。
答案 1 :(得分:12)
如果您想避免反斜杠,可以使用长名称别名:
lnf = long_name_function
olnf = other_long_name_function
with lnf(p) as a, olnf():
# ...
或者您可以嵌套语句:
with long_name_function(p) as a:
with other_long_name_function():
pass
你不想要使用contextlib.nested()
;有几个问题直接导致其弃用。例如,早期的上下文管理器不会涉及嵌套中后续上下文管理器的问题。