Dar*_*her 62 python code-formatting python-black
我想通过blackpython 格式化程序忽略特定的多行代码。特别是,这用于np.array在格式化时变得丑陋的或矩阵构造。下面是示例。
np.array(
[
[1, 0, 0, 0],
[0, -1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, -1],
]
)
# Will be formatted to
np.array([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, -1]])
Run Code Online (Sandbox Code Playgroud)
我在github 中发现了这个问题black,但这仅适用于内联命令,这不是我在这里所拥有的。
对于多行代码,我可以做些什么来实现这一点?
Ori*_*ril 106
您可以#fmt: on/off按照链接的问题中的说明使用。在你的情况下,它看起来像:
# fmt: off
np.array(
[
[1, 0, 0, 0],
[0, -1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, -1],
]
)
# fmt: on
Run Code Online (Sandbox Code Playgroud)
# fmt: off 禁用所有后续行的格式,直到再次激活格式 # fmt: on
SeF*_*SeF 20
最新版本的 black (>= 21.0) 考虑了最后一个元素后面的逗号。
np.array(
[
[1, 0, 0, 0],
[0, -1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, -1]
]
)
Run Code Online (Sandbox Code Playgroud)
将被格式化为:
np.array([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, -1]])
Run Code Online (Sandbox Code Playgroud)
(注意最后没有逗号)
np.array([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, -1],])
Run Code Online (Sandbox Code Playgroud)
将被格式化为:
np.array(
[
[1, 0, 0, 0],
[0, -1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, -1],
]
)
Run Code Online (Sandbox Code Playgroud)
(注意最后一个逗号)
Ste*_*sop 18
如果您愿意稍微更改您的代码,那么 Black 可以单独保留以下任一项:
contents = [
[1, 0, 0, 0],
[0, -1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, -1],
]
np.array(contents)
Run Code Online (Sandbox Code Playgroud)
这是因为多行列表中的尾随逗号很神奇。Black 认为它意味着你计划在未来扩展列表,尽管在这种情况下它只是意味着 Black 的风格不是很可读。不幸的是,后面的逗号不是魔术足够的工作时,列表被包裹在额外的函数调用。
np.array(
[
# just say anything
[1, 0, 0, 0],
[0, -1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, -1],
]
)
Run Code Online (Sandbox Code Playgroud)
这是因为 Black 无法战胜 Python 缺少内联注释!
| 归档时间: |
|
| 查看次数: |
17265 次 |
| 最近记录: |