Подтвердить что ты не робот

Как разбить длинный оператор с помощью python

У меня есть строка кода в python, например:

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

и я хочу разбить его на несколько строк, потому что слишком длинный, я могу использовать обратную косую черту, но они считаются плохой практикой. Я также мог использовать contextlib.nested, но устарел, есть ли другая альтернатива?

4b9b3361

Ответ 1

Это игнорирует предпосылку вопроса, но в этом случае я бы рекомендовал использовать обратную косую черту:

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

Как сказал @JonClements, вы не можете использовать скобки или запятые в этом случае, нет альтернативы, так что обратная косая черта - это путь, и код выглядит довольно чистым IMO.

Ответ 2

Если вы хотите избежать обратных косых черт, вы можете использовать длинные имена:

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(); есть несколько проблем с этим, что непосредственно привело к его устареванию. Раньше менеджеры контекста не рассматривались, например, для проблем с более поздними менеджерами контекста при вложенности.