22

我在 python 中有这样一行代码:

with long_name_function(p) as a, other_long_name_function():

我想把它分成多行,因为太长了,我可以使用反斜杠,但它们被认为是一种不好的做法。我也可以使用 contextlib.nested,但已弃用,还有其他选择吗?

4

2 回答 2

24

这无视问题的前提,但我实际上建议在这种情况下使用反斜杠:

with really_really_long_name_function(p) as f1, \
        other_really_really_long_name_function() as f2:
    pass

正如@JonClements 所说,在这种情况下你不能使用方括号或逗号,没有其他选择,所以反斜杠是要走的路,代码看起来很干净IMO。

于 2013-04-18T10:17:32.223 回答
13

如果你想避免反斜杠,你可以给长名称起别名:

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(); 它有几个问题直接导致了它的弃用。例如,较早的上下文管理器不包括嵌套中后来的上下文管理器的问题。

于 2013-04-18T10:08:42.857 回答