Меня смущает следующее поведение Python 2.7 и Python 3.3 в форматировании строк. Это вопрос, связанный с детальным вопросом о том, как оператор запятой взаимодействует со строковыми представлениями.Запятые и строки в Python 2.7 string.format()
>>> format(10000, ",d")
'10,000'
>>> format(10000, ",")
'10,000'
>>> format(10000, ",s")
ValueError: Cannot specify ',' with 's'.
>>> "{:,}".format(10000)
'10,000'
>>> "{:,s}".format(10000)
ValueError: Cannot specify ',' with 's'.
Что меня смущает то, почему ,
вариант работает, тот, у кого нет явного типа строки представления. docs говорят, что если вы опустите тип, это «То же, что и s
». И все же здесь он действует иначе, чем s
.
Я бы отклонил это как просто морщинистый/угловой корпус, но этот синтаксис используется в качестве примера в документах: '{:,}'.format(1234567890)
. Существуют ли другие «специальные» поведения, скрытые в Python, когда тип представления строки опущен? Может быть, вместо того, чтобы «то же, что и», что действительно делает код, это проверка типа форматируемой вещи?
Ах, весы упали с моих глаз! Каждый тип в Python (потенциально) определяет свой собственный язык типа представления через '__format __ (self, format_spec)'. Поэтому потенциально '' d''или' ''' может означать что-либо вообще для определенного типа, хотя есть соглашение. Бит в документах о том, что тип не является таким же, как 's', для типов представления строк. Немного дальше по документам, для целых типов презентаций, он говорит, что «Нет» так же, как «d'». Так что теперь все имеет смысл. – Nelson