#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'
Это довольно полезный и эффективный способ форматирования текста, при котором не нужно беспокоиться о типах, если вы не возражаете против их строкового представления по умолчанию.