Позволяет ли pep8 использовать \ t в печати - PullRequest
2 голосов
/ 04 мая 2020

Допускается ли использование экранированных символов, таких как \t, разрешенное PEP8 в чем-то вроде print операторов?

Есть ли более идиоматический c способ оставить отступ для части распечатки без импорта не стандартные библиотеки?

Ответы [ 3 ]

1 голос
/ 04 мая 2020

Хотя в использовании \t нет ничего плохого, вы можете использовать модуль textwrap, чтобы текст с отступом отображался более естественно в вашем исходном коде. В качестве альтернативы msg = '\teggs\tmilk\tbread' вы можете написать

import textwrap

def show_list():
    msg = """\
    eggs
    milk
    bread"""

    print(textwrap.indent(textwrap.dedent(msg), "\t"))

Затем show_list() создаст вывод

        eggs
        milk
        bread

Когда вы отступите в определении msg, пробел является частью буквального. dedent удаляет общий начальный пробел из каждой строки строки. Затем метод indent делает отступ каждой строке, в частности, символу табуляции.

1 голос
/ 04 мая 2020

Нет ничего плохого в том, чтобы использовать символ табуляции в строке. См., Например, ссылку на Википедию для некоторых общих способов использования. Вы можете быть смущены этой информацией PEP-8 :

Используйте 4 пробела на уровень отступа.

Это похоже на Джо Iddon ответ. Должно быть ясно, что написание текста (не кода, конечно) отличается от написания кода. Тексты и их использование очень неоднородны. Поэтому установка правил форматирования текста не имеет никакого смысла (если текст не является кодом).

Но вы также спросили: " Есть ли более идиоматический c способ оставить отступ некоторых из распечатать без импорта нестандартных библиотек?"

Начиная с Python3 .6 Вы можете использовать отформатированные строковые литералы , чтобы получить дополнительные пробелы (отступ) в строках, которые вы хотите напечатать. (Если вы используете Python3 .5 и ниже, например, вместо этого вы можете использовать str.format.)

Использование выглядит следующим образом:

>>> text = "Hello World"
>>> print(f"\t{text}")
    Hello World

Это просто игрушечный пример, конечно. F-строки становятся более полезными с более сложными строками. Если у вас нет таких сложных строк, вы также можете использовать аргументы оператора print () , например, так:

>>> print("Foo", "Bar", "Foo", "Bar", sep="\t\t")  # doubled "\t" only for better displaying
Foo     Bar     Foo     Bar

Но часто этого просто достаточно чтобы включить символ табуляции в вашей строке, например: "Hello World!\tHow are you doing?\tThat's it.". Как уже говорилось, не делайте этого с кодом (PEP-8), но в текстах это нормально.

Если вы хотите использовать модуль для этого (это встроенный модуль), я рекомендуем использовать textwrap . См. chepner для получения дополнительной информации о том, как его использовать.

1 голос
/ 04 мая 2020

Да, все в порядке, это фундаментальный символ ASCII - PEP не будет отрицать его использование, так как это может иметь основополагающее значение для вашего конечного результата (скажем, API необходимы вкладки или что-то в этом роде) - PEP - это все о стилизации вашего исходного кода, я бы не стал не считает символ в строке чем-то, что может быть определено руководством по стилю (PEP8).

...