Оператор — это инструкция, которую может выполнить интерпретатор 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)