繁体   English   中英

如何在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)

尽管这两种方法都使您也可以指定要分配的变量数。 尽管您可以在元组拆包过程中在所有变量中捕获有限序列的其余部分,但我不知道对无限序列有类似的窍门。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM