Функция печати

Оператор — это инструкция, которую может выполнить интерпретатор Python. Функция — это блок кода, который выполняет определенное действие и обычно содержит несколько операторов. В Python существует два типа функций: Встроенные функции — предварительно определенные функции, такие как print(), и Определяемые пользователем функции — функции, созданные программистами или разработчиками.

Функция print была добавлена в Python 3 и заменила оператор print в Python 2 (PEP 3105). По умолчанию мы можем выводить значения на экран (stdout) или в открытый файл. Это, например, часто используется при отладке. Функция может принимать любое количество позиционных аргументов и определяет четыре необязательных аргумента в виде ключевых слов, которые уже имеют значения по умолчанию.

Синтаксис

print(*objects, sep=' ', end='n', file=sys.stdout, flush=False)

Параметр Описание
объект(ы) Объекты, перед печатью будут преобразованы в строку.
sep=’разделитель’ Необязательно — укажите, как разделять объекты, если их несколько. По умолчанию это ‘ ‘.
end=’конец’ Необязательно — укажите, что печатать в конце. По умолчанию это символ ‘n’ (новая строка).
file Необязательно — объект с методом записи. По умолчанию это sys.stdout.
flush Необязательно — булево значение, указывающее, будет ли вывод промыт (True) или буферизован по умолчанию (False).

Эскейп-последовательности

Сначала кратко обсудим эти специальные символы, поскольку они часто появляются в строковых литералах с предшествующим обратным слешем . Они позволяют представлять невидимые управляющие символы и иногда экранировать недопустимые символы.

Код Описание
' одинарная кавычка
" двойная кавычка
\ обратная косая черта
новая строка или перевод строки (LF)
r возврат каретки (CR)
t табуляция
b обратный пробел

Обратите внимание, что новая строка может быть одним управляющим символом или последовательностью управляющих символов в зависимости от операционной системы (ОС).

  • Windows & Dos представляют EOL как rn.
  • Unix, Linux и macOS представляют EOL как n.
  • Mac OS X представляет EOL как r.

Печать на терминале

1. Вы можете напечатать пустую строку (n), не передавая никаких аргументов с пустыми круглыми скобками.

print()
Вход в полноэкранный режим Выход из полноэкранного режима

2. Вы можете печатать литералы. Литерал — это обозначение для представления значения в исходном коде. Существуют различные типы значений (int, float, tuple, string и т.д.).

print(17)
print(3.14159)
print((58, 128, 168))
print("Press "Enter" to continue.")
Вход в полноэкранный режим Выход из полноэкранного режима

[запустить код].

3. Вы можете печатать переменные. Переменная — это символическое имя, которое ссылается или указывает на ячейку памяти компьютера, используемую для хранения значения.

pi = 3.14159
message = "Press 'Enter' to continue."
print(message)
print(pi)
Вход в полноэкранный режим Выход из полноэкранного режима

[выполнить код]

4. Вы можете печатать выражения напрямую. Выражение — это комбинация операторов и операндов, которая интерпретируется для получения другого значения.

print(19 + 23)
print("Python was first released " + str(31) + " years aggo.")
Вход в полноэкранный режим Выход из полноэкранного режима

[выполнить код].

5. Можно вывести несколько литералов, разделяя их запятой (,).

series = "Monty Python's Flying Circus"
print("Python was named after the BBC comedy series:", series)
print(29, 31, 37)
Войти в полноэкранный режим Выход из полноэкранного режима

[выполнить код]

6. Вы можете печатать значения с другим разделителем (см. sep).

print('Hello', 'World!', sep="")
print("", "C", "Users", "Guido", "Documents", sep="/")
print("name", "email", "phone number", "address", sep="," )
Войти в полноэкранный режим Выход из полноэкранного режима

[выполнить код]

7. Вы можете печатать литералы без перевода строки или символа новой строки (см. end).

print("Proceed with Format (Y/N)? ", end="")
print("Y")
Войти в полноэкранный режим Выйти из полноэкранного режима

[run code].

Форматирование строк

Начиная с Python 3.6, вы можете форматировать строковые литералы с помощью f-строк (PEP 498). Хотя сейчас это рекомендуемый способ форматирования строковых литералов, он не предназначен для полной замены механизмов форматирования в стиле str.format() и printf.

Форматированный строковый литерал или f-строка — это строковый литерал, имеющий префикс f или F. Эти строки могут содержать поля замены, которые представляют собой выражения, разделенные фигурными скобками ({}). Мини-язык спецификации формата аналогичен тому, который используется методом str.format().

Синтаксис

"{" [field_name] ["!" conversion] [":" format_spec] "}"

Аргументы Описание
field_name Указывает объект, значение которого должно быть отформатировано и вставлено.
conversion Необязательно — принуждение типа, чтобы заставить преобразовать тип (с префиксом !).
format_spec Необязательно — спецификация того, как должно быть представлено значение (префикс :).

имя_поля

arg_name ("." attribute_name | "[" element_index "]")*

Аргументы Описание
arg_name [идентификатор цифра+]
attribute_name идентификатор
element_index цифра+ индекс_строка

преобразование

"r" | "s" | "a"

Аргументы Описание
r Вызывает repr() на аргументе перед format_spec implement __format()__.
s Вызывает str() на аргументе перед format_spec implement __format()__.
a Вызывает ascii() на аргументе перед format_spec implement __format()__.

спецификация_формата

[[fill]align] [sign] [#] [0] [width] [grouping_option] [.precision] [type]

Аргументы Описание
fill <любой символ>
align
sign
width цифра+
grouping_option
precision цифра+
type

8. Вы можете печатать выражения в f-строках.

print(f"{43 * 47}")
Вход в полноэкранный режим Выход из полноэкранного режима

[выполнить код]

9. Вы можете печатать переменные в f-строках (см. имя поля).

nation = ("Mayan")
logo = [2, (52, 121, 175), (255, 222, 77)]

print(f"The Python logo depicts {logo[0]} colored snakes based on ancient 
{nation} drawings.")
Войти в полноэкранный режим Выход из полноэкранного режима

[выполнить код]

10. Вы можете вызывать методы в f-строках (см. имя поля).

group = "Monty Python"
print(f"Eric Idle is an actor of the comedy group {group.upper()}.")
Войти в полноэкранный режим Выход из полноэкранного режима

[код запуска].

11. Вы можете вызывать функции в f-строках (см. имя поля).

def to_upper(string):
    return string.upper()

group = "Monty Python"  
print(f"Eric Idle is an actor of the comedy group {to_upper(group)}.")
Вход в полноэкранный режим Выход из полноэкранного режима

[выполнить код]

12. Вы можете печатать объекты в f-строках (см. имя поля). По умолчанию печатается то, что возвращает метод __str__, или вы можете использовать явные флаги преобразования (см. conversion).

class Color:
    def __init__(self, r = 255, g = 255, b = 255):
        self.r = r
        self.g = g
        self.b = b

    def __str__(self):
        return "This is a RGB color object."

    def __repr__(self):
        return f"Color({self.r}, {self.g}, {self.b})"

flat_blue = Color(r = 52, g = 121, b = 175)
light_gold = Color(r = 255, g = 222, b = 77)

print(f"{flat_blue}")
print(f"{flat_blue!s}")
print(f"{light_gold!r}")
Войти в полноэкранный режим Выход из полноэкранного режима

[run code].

13. Вы можете форматировать выравнивание и заполнение значений в f-строках (см. align и fill).

prime_number = 997
language = "Python"

print(f"{prime_number}")
print(f"{97:>3}")
print(f"{prime_number:0>10}")
print(f"{language:^10}")
print(f"{language:-^10}")
Войти в полноэкранный режим Выход из полноэкранного режима

[run code].

14. Вы можете форматировать знак, группировку и округление чисел в f-строках (см. sign, grouping_option и precision).

number = 9576890767
amount = 25169.15683

print(f"{number:,}")
print(f"{amount:=+11,.2f}")
print(f"$ {amount:,.2f}")
print(f"R {amount:,.2f}".replace(',', ' '))
Вход в полноэкранный режим Выход из полноэкранного режима

[run code].

15. Вы можете форматировать значения как различные типы в f-строках (см. type).

decimal_number = 29
binary_number = 0b11101
index = 0.2827
big_number = 176846309399143769411680

print(f"{decimal_number:5b}")
print(f"{decimal_number:5o}")
print(f"{decimal_number:5x}")
print(f"{decimal_number:5X}")
print(f"{binary_number:5d}")
print(f"{big_number:e}")
print(f"Python has a PYPL-index of {index:.2%}")
Войти в полноэкранный режим Выход из полноэкранного режима

[run code].

Печать в файл

Функция print не просто отправляет текст на экран, а более точно преобразует объекты в строки и записывает их в поток (файлоподобный объект). Потоком может быть любой файл на вашем диске, сетевой сокет или область в памяти (буфер). Кроме того, операционная система предоставляет три стандартных потока:

Поток Ручка файла Описание
stdin (стандартный ввод) 0 ввод с клавиатуры
stdout (стандартный вывод) 1 вывод на экран
stderr (стандартная ошибка) 2 экранный вывод

Как упоминалось ранее, функция print по умолчанию использует stdout. Однако, используя оператор перенаправления (>), мы можем указать операционной системе использовать вместо него файловый поток. Оператор перенаправления может либо перенаправить ввод в команду оболочки, либо вывод из команды оболочки. Чтобы перенаправить stderr, необходимо использовать файловый дескриптор. Файловые дескрипторы — это постоянные номера, связанные со стандартными потоками. Эти дескрипторы позволяют перенаправлять один или несколько потоков одновременно.

Синтаксис Описание
program > file Перенаправить stdout в файл.
program 2> file Перенаправить stderr в файл.
program > file 2> file Перенаправить stdout и stderr в отдельные файлы.
program >> file Добавить stdout в файл.
program < file Набрать текстовый файл и передать текст в программу.

Например, вы можете выполнить команду systeminfo.exe, чтобы сохранить в файл информацию, предоставленную командой systeminfo.

PS systeminfo > system_info.txt
Вход в полноэкранный режим Выход из полноэкранного режима

16. Вы можете использовать перенаправление потока для различных программ командной строки, включая ваши собственные сценарии Python.

# message.py
print("This message will be written to stdout")
Войти в полноэкранный режим Выход из полноэкранного режима
PS python message.py > message.txt
Войти в полноэкранный режим Выход из полноэкранного режима

17. В Python можно использовать перенаправление потока. Для этого сначала нужно получить ссылку на стандартный вывод с помощью файлового объекта stdout модуля sys. Хорошей практикой является сохранение исходного значения стандартного вывода в переменной перед его изменением. Таким образом, вы сможете вернуть его к исходному значению впоследствии. Оператор with создает контекст выполнения, который позволяет запускать группу операторов под управлением менеджера контекста. Функция open пытается открыть файл в режиме записи и в случае успеха возвращает объект файла, называемый также handle. Следующие режимы обычно используются с функцией print:

Режим Описание
'r' Открыть для чтения (по умолчанию).
'w' Открыть для записи, предварительно усекая файл.
'x' Открыт для эксклюзивного создания, не работает, если файл уже существует.
'a' Открыт для записи, добавление в конец файла, если он существует.
'+' Открыть для обновления (чтение и запись).
import sys


default_stdout = sys.stdout # save the original value of stdout

print("This message will be written to stdout.")

with open('message.txt', 'w') as file_object:
    sys.stdout = file_object # redirect stdout to the file
    print("This message will be written to file.")
    sys.stdout = default_stdout # reset stdout to its original value

print("This message will be written to stdout.")
Вход в полноэкранный режим Выход из полноэкранного режима

18. Вы можете печатать в файл напрямую, не используя перенаправление потока (см. file).

import sys


print("This message will be written to stdout.")

with open('message.txt', 'w') as file_object:
    print("This message will be written to file.", file=file_object)
Войти в полноэкранный режим Выйти из полноэкранного режима

19. Вы можете отключить буферизацию стандартного вывода. Операционная система буферизирует дорогостоящие операции ввода-вывода для повышения производительности, но иногда буферизация может иметь нежелательные последствия. Существует три вида потоков, относящихся к буферизации — небуферизованный, линейно-буферизованный и блочно-буферизованный. Строчно-буферизованный поток ждет, пока в буфере не будет EOL, в то время как блочно-буферизованный поток ждет, пока буфер заполнится. Стандартный вывод является как линейно-буферизованным, так и блочно-буферизованным, в зависимости от того, какое событие приходит первым. (см. flush)

from time import sleep


for number in reversed(range(10 + 1)):
    print(number, end=" ", flush=True)
    sleep(1)
print("Launch!")
Вход в полноэкранный режим Выход из полноэкранного режима

20. В завершение нашего рассмотрения функции печати приведем реальный пример текстового индикатора выполнения, который можно использовать для программ командной строки.

from time import sleep


width = 10

for progress in range (101):
    fill = width * progress // 100
    track = width - fill
    value = f"{progress / 100:.0%}"
    print("r[", "#" * fill, " " * track, "]", value, sep="", end="", flush=True)
    sleep(0.1)
Вход в полноэкранный режим Выход из полноэкранного режима

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *