我在python中处理某些事情,我有几个由很长的公式计算的变量。我在这个网站上做了一些搜索,我发现python允许隐式换行,这对我来说是一个解决方案,因为我可以在多行上拉伸公式: line-breaking
现在我一直以不同的方式工作。让我举个例子,如果A将由以下公式给出:
A = b + c + d + e
我将其编码为:
A = b + c
A += d + e
我想知道什么是首选方法。在我当前的方法中使用隐式换行是否有计算优势?
答案 0 :(得分:4)
我们需要更多的上下文来确定,但这里有一些示例案例。
对于字符串,作为CPython的实现细节,显式拆分会更好(有时很多更好),因为there is an optimization for an add (a = a + b
) or inplace add (a += b
) where the add/iadd instruction itself is immediately followed by a store to the left-hand side of the add.这就是说,对于字符串,你会更可靠通过执行A = ''.join((b, c, d, e))
而不是重复连接而不管操作数大小或特定Python解释器的性能。
对于int
,float
和complex
类型,单行方法将会更加高效,仅仅是因为它避免了不必要的存储和加载指令,但差别很小;它们都是不可变的标量值,因此无论如何都不会发生值的就地操作,你将在处理期间创建相同数量的临时值,唯一的问题是它们是否(简要地)绑定到本地名称
坦率地说,如果不是连接字符串或序列(前者应该使用''.join
,后者使用itertools.chain
来获得O(n)
性能),首选方法是不是行连续字符(很容易被不可见的尾随空格弄乱)但是用于分组的简单括号。如果A = b + c + d + e
的真实姓名太长而无法排成一行,我的首选方法是:
A = (b + c +
d + e)
PEP8 prefers to break lines before the next operator,而不是之后,所以严格的PEP8代码将是:
A = (b + c
+ d + e)
这是PEP8(Python样式指南)支持的方法,它说:
包装长行的首选方法是在括号,括号和括号内使用Python隐含的行继续。通过在括号中包装表达式,可以在多行中分割长行。这些应该优先使用反斜杠进行续行。
使用反斜杠的唯一真实情况是括号不是语法的合法部分(链接包含with
语句的示例)。