как разбить длинную строку цепочек заданий в Python - PullRequest
0 голосов
/ 30 марта 2019

У меня есть длинная строка связанных цепочек заданий, подобных этой:

long_variable_name = another_long_name = a_third_name = some_func()

Я бы хотел разбить ее, не используя символ продолжения строки \.Обычно я делаю это, используя дополнительные скобки, например,

result = (some_long_func(), some_other_long_func(), some_third_func(),
          some_fourth_func())

Я не вижу, как заключить в скобки цепочечные назначения, так как это недопустимый синтаксис:

a = b = (c = 1)
a = b = c (= 1)

Есть ли способразорвать длинную строку связанных цепочек без использования символа продолжения строки?

1 Ответ

2 голосов
/ 30 марта 2019

В качестве одного оператора, нет никаких подвыражений для скобок.Я не фанат явных продолжений строк, но это, вероятно, тот случай, когда он выглядит наименее плохим (возможно, потому, что имена переменных все еще, вероятно, короче, чем другие строки, которые вы можете разбивать).

long_variable_name = \
    another_long_name = \
    a_third_name = some_func()

Я не знаю, хотите ли вы поместить вызов функции в строку отдельно или нет.

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

long_variable_name = some_func()
another_long_name = long_variable_name
a_third_name = long_variable_name

Вы можете попробовать распаковать кортежи.Это выглядит немного хамски IMO, но ...

(long_variable_name,
 another_long_name,
 a third_name) = (some_func(),)*3

За счет немного больше накладных расходов времени выполнения, вы можете использовать itertools.repeat:

from itertools import repeat

(long_variable_name,
 another_long_name,
 a third_name) = repeat(some_func(), 3)

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

# Good
v1, v2, v3, *rest = repeat(some_func(), 100)

# Bad - infinite loop
v1, v2, v3, *rest = repeat(some_func())
...