如何打破 python 中的一长串链式作业
how to break a long line of chained assignments in python
我有一长串这样的链式作业:
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
您可以尝试解包元组。 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())
我有一长串这样的链式作业:
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
您可以尝试解包元组。 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())