簡體   English   中英

黑色格式化程序 - 忽略特定的多行代碼

[英]Black formatter - Ignore specific multi-line code

我想通過black python 格式化程序忽略特定的多行代碼。 特別是,這用於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]])

我在black github 中發現了這個問題,但這僅適用於內聯命令,這不是我在這里所擁有的。

對於多行代碼,我能做些什么來實現這一點?

您可以使用#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

# fmt: off禁用所有后續行的格式化,直到使用# fmt: on再次激活格式化

如果您願意稍微更改您的代碼,那么 Black 會單獨保留以下任何一項:

contents = [
    [1, 0, 0, 0],
    [0, -1, 0, 0],
    [0, 0, 1, 0],
    [0, 0, 0, -1],
]

np.array(contents)

這是因為多行列表中的尾隨逗號很神奇。 Black 認為它意味着您計划在將來擴展列表,盡管在這種情況下它只是意味着 Black 的風格不是很可讀。 不幸的是,當列表包含在額外的 function 調用中時,尾隨逗號還不夠神奇。

np.array(
    [
        # just say anything
        [1, 0, 0, 0],
        [0, -1, 0, 0],
        [0, 0, 1, 0],
        [0, 0, 0, -1],
    ]
)

這是因為 Black 無法勝過 Python 缺乏內聯注釋!

最新版本的黑色 (>= 21.0) 考慮了最后一個元素后的逗號。

所以:

np.array(
    [
        [1, 0, 0, 0],
        [0, -1, 0, 0],
        [0, 0, 1, 0],
        [0, 0, 0, -1]
    ]
)

將被格式化為:

np.array([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, -1]])

(注意沒有最后一個逗號)

反而

np.array([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, 1, 0], [0, 0, 0, -1],])

將被格式化為:

np.array(
    [
        [1, 0, 0, 0],
        [0, -1, 0, 0],
        [0, 0, 1, 0],
        [0, 0, 0, -1],
    ]
)

(注意最后一個逗號)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM