Какова настройка Python по умолчанию для ширины строковых операций и чем она отличается от 0?

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

Я пытаюсь понять разницу между

"You have $%.2f left in your piggy bank" % totalCash

а также

"You have $%0.2f left in your piggy bank" % totalCash

Согласно книге, которую я изучаю (Python Programming: An Introduction to Computer Science, John Zelle): «Вы можете использовать ширину 0, чтобы указать «используйте столько места, сколько необходимо». Что не имеет смысла, так это Он уже использует столько места, сколько необходимо. Если я укажу, что у меня есть 100000,42 в моей переменной, он все равно напечатает его с правильным количеством места, независимо от того, поставил ли я "0" в качестве ширины или нет.

Выход идентичен.

Вот мне кажется, что "0" ширина по умолчанию установлена, но потом я посмотрел документацию на Python.org и они говорят то же самое, но с какими-то узкотехническими словами я не понимаю

" Если перед полем ширины ставится символ нуля ("0"), для числовых типов допускается заполнение нулями с учетом знака. Это эквивалентно символу заполнения "0" с типом выравнивания "=" "

Я вообще этого не понимаю, но я понимаю эту следующую строку, которая звучит так, как будто это то же самое, что я думал, что «0» сделал:

" ширина - это десятичное целое число, определяющее минимальную ширину поля. Если не указано, то ширина поля будет определяться содержимым."

Так в чем разница, может кто объяснит?

Я использую Python 2.7


person aaron-coding    schedule 09.04.2014    source источник


Ответы (2)


Обратите внимание, что ни один из них не является правильным способом делать что-то сейчас. Теперь мы используем форматирование строк, но аналогичный формат существует. .

По сути, использование 0 означает, что если ваши ДАННЫЕ короче, чем ваша ШИРИНА, они будут заполнены нулями, чтобы заполнить ширину.

>>> "{:8}".format(12)
'      12'
>>> "{:08}".format(12)
'00000012'   # different when data is shorter than width
>>> "{:8}".format(1234567890)
'1234567890'
>>> "{:08}".format(1234567890)
'1234567890' # no difference when data is longer than width

В старом стиле интерполяции строк это будет так:

>>> "%8d" % 12
'      12'
>>> "%08d" % 12
'00000012'
>>> "%8d" % 1234567890
'1234567890' # still no change
>>> "%08d" % 1234567890
'1234567890' # when data is longer than width
person Adam Smith    schedule 09.04.2014
comment
Может быть, использовать разные цифры, чтобы указать разницу? - person vaultah; 09.04.2014
comment
Привет, Адам! Большое спасибо! Я вижу, как добавление 0 перед указанной шириной приводит к заполнению вывода нулями. Значит, один 0 ничего не делает? (Как я и думал?) Удивительно, что я изучаю интерполяцию старых строк. Это было заменено в Python 3+? Есть ли у вас какие-либо предложения о хороших книгах, чтобы прочитать самые последние вещи? Я занимаюсь программированием в качестве долгосрочной профессии и берусь за все, чему могу научиться. - person aaron-coding; 10.04.2014
comment
@affinities23 Нет проблем! Если мой ответ помог, отметьте его как принятый. Я не могу сказать вам, когда str.format начал использоваться вместо маркера итерполяции %, но я уверен, что вы могли бы просмотреть документы и найти его. Что касается литературы по этому вопросу, я на самом деле не являюсь хорошим источником для этого, потому что все, что я когда-либо узнал о кодировании, я сделал, продираясь через страницы документации и гугля в поисках руководств. К сожалению, переполнение стека тоже не может вам помочь (поиск стороннего ресурса - близкая причина!) - person Adam Smith; 10.04.2014
comment
@ affinities23 0 ничего не делает сам по себе, потому что без поля ширины рядом с ним вы устанавливаете MINWIDTH для поля равным нулю. Конечно, любая строка будет соответствовать или превышать эту минимальную ширину, поэтому вы никогда не увидите никаких изменений. Флаг 0, который вы ищете, может существовать только с определенной шириной поля и просто заполняет пространство. Используя str.format, вы можете заполнить любой символ (попробуйте print("{:=^70}".format("Header"))), а не только ноль. - person Adam Smith; 10.04.2014
comment
@AdamSmith Круто, я принял твой ответ. Это мой первый вопрос, который я задал на Stack Overflow, поэтому я даже не знал, как принять ответ! Я попробовал ваш код print({:=^70}.format(Header)) и это довольно круто. Спасибо за теплый прием. :-) - person aaron-coding; 10.04.2014

За символом формата 0 должен следовать width, которого вы хотите достичь:

>>> "You have $%08.2f left in your piggy bank" % 1.2
'You have $00001.20 left in your piggy bank'
>>> "You have $%08.2f left in your piggy bank" % 10.2
'You have $00010.20 left in your piggy bank'
person Selcuk    schedule 09.04.2014