Sono confuso dal seguente comportamento di Python 2.7 e Python 3.3 nella formattazione delle stringhe. Questa è una netta domanda particolare su come l'operatore virgola interagisce con i tipi di presentazione delle stringhe.Commas e stringhe in 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'.
Ciò che mi confonde è per questo che la variante ,
funziona, l'uno senza esplicito tipo di presentazione di stringa. Il docs dice che se si omette il tipo, è "Lo stesso di s
". Eppure qui sta agendo in modo diverso da s
.
Ignorerei questo come solo un caso di ruga/angolo, ma questa sintassi viene utilizzata come esempio nei documenti: '{:,}'.format(1234567890)
. Ci sono altri comportamenti "speciali" nascosti in Python quando il tipo di presentazione della stringa viene omesso? Forse invece di "same as s" cosa sta facendo realmente il codice è l'ispezione del tipo di cosa che viene formattata?
Ah, le scaglie sono cadute dai miei occhi! Ogni tipo in Python (potenzialmente) definisce il proprio linguaggio di tipo di presentazione tramite '__format __ (self, format_spec)'. Quindi potenzialmente ''d'' or '' 'potrebbe significare qualcosa per un tipo particolare, anche se c'è convenzione. Il bit nei documenti su nessun tipo che è "uguale a' s' "è per i tipi di presentazione stringa. Solo un po 'più in basso nella documentazione, per i tipi di presentazione interi, dice che None è "uguale a' d' ". Quindi ora tutto ha un senso. – Nelson