Python: как печатать без новой строки или пробела

Введение Функция print () в Python добавляет новую строку к выходным данным при отображении на tty (телетайп или терминал). Если вы не хотите, чтобы ваше сообщение отображалось с новой строкой или пробелами, как вы можете изменить поведение print ()? Этого легко добиться, изменив значения по умолчанию для параметров sep и end функции print (). Печать без новой строки До версии Python 2.x print была зарезервированным ключевым словом, которое действует как специальный оператор. С

Вступление

Функция print() в Python добавляет новую строку к выводу при отображении на tty (телетайп AKA терминал). Если вы не хотите, чтобы ваше сообщение отображалось с новой строкой или пробелами, как вы можете изменить поведение print() ?

Этого легко добиться, изменив значения по умолчанию для параметров sep и end функции print() .

Печать без новой строки

До версии Python 2.x print была зарезервированным ключевым словом, которое действует как специальный оператор. Начиная с версии Python 3.x, команда print превратилась в функцию.

Эта версия print() может принимать следующие аргументы:

Функция печати -синтаксис{.ezlazyload}

Значения ( value1 , value2 ), упомянутые выше, могут быть любой строкой или любыми типами данных, такими как список, число с плавающей запятой, строка и т. Д. Другие аргументы включают разделитель ( sep ), используемый для разделения значений, заданных в качестве аргументов, тогда как end по умолчанию символ новой строки \n Это причина того, почему всякий раз, когда print() , курсор перемещается на следующую строку.

В Python 3.x самый простой способ печати без новой строки - установить end аргумент как пустую строку, то есть '' . Например, попробуйте выполнить следующий фрагмент в интерпретаторе Python:

 print("I am a sentence", "I am also a sentence") 

Интерпретатор выведет следующее:

 I am a sentence I am also a sentence 
 >>> 

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

Теперь измените предыдущий оператор, чтобы он выглядел так:

 print("I am a sentence", "I am also a sentence", sep="; ", end="") 

Выполнив его в интерпретаторе, вы получите результат, похожий на:

 I am a sentence; I am also a sentence>>> 

Здесь произошло две вещи - разделитель между двумя строками теперь также включает точку с запятой. Приглашение интерпретатора также появляется в той же строке, потому что мы удалили автоматически добавляемый символ новой строки.

Печать без новой строки в Python 2.X

Для более ранних версий Python - меньше 3, но больше 2.6 - вы можете импортировать print_function из модуля __future__ Это будет перекрывать существующую print ключевого слова с print() функции , как показано ниже:

 from __future__ import print_function 
 
 print("I am a sentence", "I am also a sentence", sep="; ", end="") 

Это также даст:

 I am a sentence; I am also a sentence>>> 

Вот как вы можете использовать print() Python версии 3 в Python 2.x.

Использование stdout.write ()

Модуль sys имеет встроенные функции для записи непосредственно в файл или tty . Эта функция доступна для версий Python 2.x и 3.x. Мы можем использовать метод write() stdout модуля sys для печати на консоли следующим образом:

 import sys 
 
 sys.stdout.write("I am a line") 

Давайте выполним это и посмотрим на результат:

 I am a line>>> 

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

Заключение

В этой статье мы изучили различные способы вывода значений без символа новой строки / возврата каретки. Эта стратегия может оказаться весьма удобной при печати элементов выходных данных алгоритмов, таких как двоичное дерево, или при печати содержимого списка рядом друг с другом.

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus