Черный форматировщик - игнорировать определенный многострочный код

Я хотел бы игнорировать конкретный многострочный код, 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, но это работает только для встроенных команд, чего у меня здесь нет.

Могу ли я что-нибудь сделать, чтобы добиться этого для многострочного кода?

3 ответа

Решение

Вы можете использовать #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)

Это потому, что конечная запятая в многострочном списке магическая. Черные понимают это как намерение расширить список в будущем, хотя в данном случае это означает, что стиль черных не очень удобочитаем. К сожалению, конечная запятая недостаточно волшебна , чтобы работать, когда список заключен в этот дополнительный вызов функции.

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

Это потому, что Блэк не может перехитрить отсутствие встроенных комментариев в 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],
    ]
)

(обратите внимание на последнюю запятую)

Другие вопросы по тегам