python - 在变量赋值中使用换行符

标签 python python-3.x

我正在用 python 做一些事情,我有几个变量是通过很长的公式计算的。我在这个网站上做了一些搜索,我发现 python 允许隐式换行,这对我来说是一个解决方案,因为我可以将公式扩展到多行: line-breaking

现在我一直在以不同的方式工作。让我举个例子,如果 A 由以下公式给出:

A = b + c + d + e

我会将其编码为:

A = b + c
A += d + e

我想知道什么是首选方法。与我当前的方法相比,使用隐式换行是否具有计算优势?

最佳答案

我们需要更多背景信息才能确定,但​​这里有一些示例案例。

对于字符串,作为 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.也就是说,对于字符串,无论操作数大小或特定的 Python 解释器如何,通过执行 A = ''.join((b, c, d, e)) 而不是重复串联。

对于 intfloatcomplex 类型,单行方法的性能会稍微提高一些,仅仅是因为它避免了不必要的存储和加载指令,但区别是微不足道的;它们都是不可变的标量值,因此无论如何都不会发生值的就地操作,在处理过程中您将创建相同数量的临时值,唯一的问题是它们是否(短暂)绑定(bind)到本地名称.

坦率地说,如果这不是连接字符串或序列的问题(前者应该使用 ''.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 风格指南),其中写道:

The preferred way of wrapping long lines is by using Python's implied line continuation inside parentheses, brackets and braces. Long lines can be broken over multiple lines by wrapping expressions in parentheses. These should be used in preference to using a backslash for line continuation.

使用反斜杠的唯一实际情况是括号不是语法的合法部分(该链接包含 with 语句的示例)。

关于python - 在变量赋值中使用换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48170332/

相关文章:

python - 在 Odoo 11 中通过 Python 修改的电子邮件模板中是否会忽略翻译?

python - TypeError at/admin/jobs/job/add/'tuple' 不支持缓冲区接口(interface)

python - 分解理解列表中的元组

python - 如何在 Django 中迭代数组中的所有值

python - Zip 文件破解器 python 3 将仅在文本文件末尾使用密码

python - 从图像中提取文本。文字识别

python - 从另一个 python 文件控制 python 进程

python - django Rest框架如何验证对象列表?

python - 每个 python 程序都应该与 setup.py 一起分发吗?

python - str.lstrip() 意外行为