#python #python-3.7
#python #python-3.7
Вопрос:
Почему str.format() заполняется слева для целых чисел, но справа для строк по умолчанию? Для меня не имеет смысла, почему бы не использовать только одно заполнение по умолчанию как для целых чисел, так и для строк.
Например, в случае, если значение представляет собой строку, оно располагается по центру слева:
>>> "{value:20}".format(value="Guido van Rossum")
'Guido van Rossum '
>>> "{value:>20}".format(value="Guido van Rossum")
' Guido van Rossum'
но в случае, если значение является целым числом, по умолчанию оно центрируется справа:
>>> "{value:20}".format(value=8)
' 8'
>>> "{value:<20}".format(value=8)
'8 '
Я бы ожидал, что он будет работать одинаково как для целочисленного значения, так и для строкового значения. В чем необходимость такого поведения?
Комментарии:
1. Дублирование на разных сайтах и языках: ux.stackexchange.com/questions/13795 /… .
2. Это нормально, когда числа выровнены по правому краю. Подумайте о своей банковской выписке. Вы действительно хотели бы видеть столбец транзакций с номерами, выровненными по левому краю? Точно так же нормально, чтобы строки (по крайней мере, в языках, которые читаются слева направо) были выровнены по левому краю. Разница в значении по умолчанию ставит ожидания обычного программиста выше механической однородности. Возможно, вы ожидаете, что это будет работать одинаково для целых чисел и строк. Но большинство людей этого не делают.
Ответ №1:
Вероятно, это следует закрыть как не относящееся к теме или основанное на мнении, потому что вы не хуже нас знаете, что технический ответ «потому что это то, что выбрал разработчик функции».
Но, черт возьми, это соглашение о форматировании ОЧЕНЬ распространено. Откройте Excel. Перетащите столбец, чтобы он был достаточно широким. Введите короткое числовое значение в одну ячейку в этом столбце и короткую строку в другой.
Если это не то поведение, которое вам нужно, используйте <
или >
, чтобы обеспечить согласованное заполнение в соответствии с вашими потребностями. Если это не то, что вы ожидаете, я не знаю, что вам сказать, кроме как скорректировать ваши ожидания, потому что это документированное поведение функции.
Комментарии:
1. Проверьте мою ссылку — это более чем распространено, это «стандарт».
2. @kabanus — «это стандарт» — бессмысленная фраза. Существует много стандартов, и если в документации указано, что
format
по умолчанию все значения будут заполнены слева, то такое поведение будет таким же правильным. Обычная практика, которая была выбрана, была выбранной практикой — вот и все, что в ней есть.3. Полностью не согласен. Не всегда бывает так, что существует «много стандартов». В данном конкретном случае это почти повсеместно. Разработчик языка мог бы пойти против этого стандарта, но по какой-то причине большинство этого не делает. Это, конечно, ничего не говорит о правильности чего-либо, только то, что вы могли бы ожидать.