【发布时间】:2019-03-29 21:49:18
【问题描述】:
我有一长串这样的链式作业:
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)
有没有什么方法可以在不使用续行符的情况下打破一长串的链式赋值?
【问题讨论】:
-
这似乎是一个矛盾的术语:你想继续这一行,但不使用 Python 的行继续语法。您为什么要避免为此目的而提供的语言工具?
-
括号不起作用,因为这是创建子表达式(第二次尝试)或元组(第一次尝试)的语法。
-
@Prune 我猜你可能会说 Python 与其自己的设计原则不一致(这里更喜欢隐式与显式)但引用 PEP8 “包装长行的首选方法是使用 Python 内部的隐含行延续括号、方括号和大括号。通过将表达式包裹在括号中,可以将长行分隔为多行。应优先使用这些行,而不是使用反斜杠来续行。"
-
我没有看到不一致之处,但我认为您作为用户的观点。语言定义为我们提供了如何继续一行的优先级。 “复合声明”不适合其中任何一个。但是,我(还)不明白为什么你想要一个配对的外壳来排除行尾延续。从用户的角度来看,我可以比现有的实现更容易地争论“你”的一面。从解析器的角度来看,我可以更好地论证设计者的立场——语法空间在语法的那个点是拥挤的。
-
这里没有深刻的推理:) 几年前我刚读过 PEP8 中的那一段,从那以后就不需要换行符了!因为这是我第一次认为我可能需要一个,所以我想检查我是否错过了在我的示例中没有 `` 的跨越多行的方法。答案是肯定的“不”,所以我很高兴,我认为接受的答案很好地概述了选择。
标签: python coding-style pep8