我有一长串这样的链接分配:
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)
有没有办法在不使用换行符的情况下中断一长串的链接分配?
答案 0 :(得分:2)
作为单个语句,没有括号的子表达式。我不喜欢显式的行继续,但是这可能是最糟糕的情况(也许是因为变量名可能仍然比您要中断的其他行短)。
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)
尽管这两种方法都使您也可以指定要分配的变量数。尽管您可以在元组拆包过程中在所有变量中捕获 finite 序列的其余部分,但我不知道对无限序列有类似的窍门。
# Good
v1, v2, v3, *rest = repeat(some_func(), 100)
# Bad - infinite loop
v1, v2, v3, *rest = repeat(some_func())