Jestem zdezorientowany przez następujące zachowanie w Pythonie 2.7 i Pythonie 3.3 w formatowaniu String. Jest to szczegółowe pytanie dotyczące interakcji operatora przecinkowego z typami prezentacji ciągów.Przecinki i ciągi w Pythonie 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'.
Co mnie mylące dlatego wariant ,
pracuje, ten z bez wyraźnego typu prezentacji ciąg. docs mówi, że jeśli pominiesz ten typ, jest to "Tak samo jak s
." A jednak tutaj działa inaczej niż s
.
Odrzuciłbym to jako tylko przypadek zmarszczek/narożników, ale ta składnia jest używana jako przykład w dokumentach: '{:,}'.format(1234567890)
. Czy są inne "specjalne" zachowania ukryte w Pythonie, gdy typ prezentacji ciągów jest pominięty? Może zamiast "tak jak s" to, co naprawdę robi kod, to sprawdzanie typu formatowanej rzeczy?
Ach, łuski spadły z moich oczu! Każdy typ w Pythonie (potencjalnie) definiuje własny język prezentacji za pomocą '__format __ (self, format_spec)'. Potencjalnie "d'" lub "" "może oznaczać cokolwiek dla jakiegoś określonego typu, chociaż istnieje konwencja. Bit w dokumentach o braku typu "taki sam jak" s "dotyczy typów prezentacji ciągów. Po prostu nieco dalej w dokumentach, dla typów prezentacji całkowitych, mówi "Brak jest" taki sam jak "d" ". Teraz wszystko ma sens. – Nelson