我有很长的链式任务,如下所示:
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)
有没有办法在不使用续行字符的情况下打破一长串链式赋值?
作为单个语句,没有用于括号的子表达式。我不是显式行继续的粉丝,但这可能是一个看起来最不好的情况(可能是因为变量名称仍然可能比你可能破坏的其他行更短)。
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
你可以试试元组拆包。它看起来有点hackish 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)
虽然这两种方法都可以指定分配的变量数量。虽然你可以在元组解包期间捕获catch-all变量中有限序列的剩余部分,但我不知道无限序列的类似技巧。
# Good
v1, v2, v3, *rest = repeat(some_func(), 100)
# Bad - infinite loop
v1, v2, v3, *rest = repeat(some_func())