Черный форматировщик - игнорировать определенный многострочный код
Я хотел бы игнорировать конкретный многострочный код, 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],
]
)
(обратите внимание на последнюю запятую)