Как напечатать без новой строки и пробела
Я столкнулся с проблемой использования функции print
в Python. Рассмотрим следующие примеры:
>>> for i in range(4): print('.')
.
.
.
.
>>> print('.', '.', '.', '.')
. . . .
В каждом случае между выводимыми значениями добавляется либо перевод строки, либо пробел. Как я могу избежать этого, чтобы получить вывод в виде ....
? Другими словами, как мне "добавить" строки в стандартный поток вывода?
4 ответ(ов)
Замечание: название этого вопроса раньше было что-то вроде "Как использовать printf в Python".
Поскольку люди могут искать информацию по этому заголовку, следует упомянуть, что Python также поддерживает подстановку в стиле printf:
>>> strings = ["один", "два", "три"]
>>>
>>> for i in range(3):
... print("Элемент %d: %s" % (i, strings[i]))
...
Элемент 0: один
Элемент 1: два
Элемент 2: три
Кроме того, вы можете легко умножать строковые значения:
>>> print("." * 10)
..........
Этот способ вполне удобен, хотя в более современных версиях Python предпочтительнее использовать f-строки или метод .format()
. Однако, если вы находитесь в контексте кода, где используется стиль printf, вышеуказанный подход будет работать.
Чтобы вывести символы на одной строке в Python, вы можете использовать метод sys.stdout.write()
вместе с sys.stdout.flush()
, чтобы принудительно обновить вывод. Однако, при использовании этого метода в Python 3 рекомендуем использовать print()
с аргументом end
, чтобы управлять тем, как происходит вывод. Вот пример:
import sys
import time # Для демонстрации задержки
for i in range(10): # Используем range вместо xrange в Python 3
print(".", end="", flush=True) # Выводим точку, не переводя на новую строку
time.sleep(0.5) # Добавляем небольшую задержку для наглядности
В приведенном выше коде print(".", end="", flush=True)
означает, что символ точки будет выводиться на той же строке, без перехода на новую строку, а flush=True
обновляет вывод сразу. Таким образом, вы получите ожидаемый результат на одной строке.
В Python 3.x функция print
имеет необязательный параметр end
, который позволяет изменить символ в конце строки:
print("HELLO", end="")
print("HELLO")
Вывод будет:
HELLOHELLO
Также есть параметр sep
, который задает разделитель между выводимыми значениями:
print("HELLO", "HELLO", "HELLO", sep="")
Вывод:
HELLOHELLOHELLO
Если вы хотите использовать это в Python 2.x, просто добавьте следующую строку в начало вашего файла:
from __future__ import print_function
Использование functools.partial
для создания новой функции под названием printf
выглядит следующим образом:
>>> import functools
>>> printf = functools.partial(print, end="")
>>> printf("Hello world\n")
Hello world
Таким образом, вы можете создать обёртку вокруг функции, устанавливая значения по умолчанию для её параметров. В данном случае, мы устанавливаем end=""
, чтобы вывод в консоль не добавлял новый символ строки после значения, а вместо этого вы можете добавлять его вручную при необходимости. Это простой способ упростить вызов функции с заданными параметрами.
Почему используется string.join(list), а не list.join(string)?
Создание словаря с помощью генератора словарей
Как получить полный путь к директории текущего файла?
UnicodeDecodeError: Кодек 'charmap' не может декодировать байт X в позиции Y: символ отображается как <неопределённый>
Найти все файлы с расширением .txt в директории на Python