почему python не преобразует float или любой другой тип данных в string при записи с помощью string ?

#python #string #python-3.x #floating-point

#python #строка #python-3.x #с плавающей запятой

Вопрос:

Предположим

 p1="python"
p2="script"
r=0.242424

print(p1 " " p2 " " r)          #wrong or error in python
print(p1 " " p2 " " str(r))       #correct  
  

Почему я должен явно преобразовывать float в string в Python, но другие языки, такие как Java, преобразуют его неявно?

Комментарии:

1. Потому что разные языки разные. Python строго типизирован ; неявного преобразования нет.

2. В Python явное лучше, чем неявное , также вы добавляете строку и значение с плавающей точкой, что недопустимо. Сначала вы добавляете, а затем печатаете результат.

3. IMHO Java и другие языки в этом случае ошибаются … на самом деле в Java вы можете сделать это просто потому, что компилятор при переводе кода скрыто создает StringBuilder и соединяет различные фрагменты строки, поэтому вы фактически не вызываете какой-либо String метод. Они должны были разрешить это, потому что в противном случае код был бы действительно слишком подробным.

4. Да, потому что Java-идиома записи s = "" x; для преобразования числа в строку действительно понятна, не так ли ?!

Ответ №1:

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

 print(p1, p2, r)
  

Цитирование print() документации:

Все аргументы, не являющиеся ключевыми словами, преобразуются в строки типа str() does и записываются в поток, разделенные sep и сопровождаемые end .

sep по умолчанию ' ' использует строку.

Обычно вы используете форматирование строки для интерполяции значений в строку:

 print("Running a {} {} to show the value of r={:.6f}".format(p1, p2, r))
  

В противном случае попытка объединения строк с другими значениями не преобразует значения неявно; это противоречит Дзен Python:

Явное лучше, чем неявное.

Ответ №2:

Если вы хотите объединить различные типы данных в строку, конкатенация с помощью или с str.join помощью метода потребует, чтобы они были строками, прежде чем вы это сделаете.

Как показывает Martijn , это не требуется для печати, но это может сбить с толку, потому что печать по умолчанию включает перевод строки и пробел, разделяющий печатаемые элементы, разделенные запятыми.

Если вы хотите неявно преобразовать их в строки, я рекомендую string.format метод:

 >>> '{0} {1} {2}'.format(p1, p2, r)
'python script 0.242424'
  

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