2012-07-02 9 views
5

Python ha la funzione per la stringa per verificare se tutti i caratteri sono cifre: string.isdigit().Come e perché è dipendente da string.isdigit() locale?

Nel manuale è scritto:

Per le stringhe a 8 bit, questo metodo è dipendente dal luogo

Come è questo metodo locale-missione che dipendono? In quali locali ci sono cifre che non rientrano nell'intervallo 0-9?

Inoltre, se questo è dipendente dalla locale, Python ha un metodo per controllarlo con una locale specifica (cioè solo 0-9 cifre).

+3

http://en.wikipedia.org/wiki/Glyphs_used_with_the_Hindu-Arabic_numeral_system#Symbols – interjay

+0

penso al manuale solo significa che gli attuali codici di carattere a 8 bit sono dipendente dal luogo, non è che i personaggi aren 't 0-9. – martineau

risposta

1

python ha un metodo per controllarlo con un locale specifico (cioè solo 0-9 cifre).

Il modo più semplice:

>>> '1' in '1234567890' 
True 
>>> 'a' in '1234567890' 
False 

Il tuo può anche controllare ord, è potrebbe essere più veloce (isn't):

>>> ord('0') <= ord('a') <= ord('9') 
False 
>>> ord('0') <= ord('5') <= ord('9') 
True 
+0

Cercare una funzione globale e chiamarla, tre volte, non dovrebbe essere più veloce del caricamento di un confronto locale e di 10 caratteri in C. – delnan

+0

Sì, il primo è più veloce. aggiunto benchmark – Kos

+0

Questo controlla solo un carattere, non un'intera stringa di cifre. –

4

CPython utilizza la funzione C "isdigit" per il metodo is_digit su stringhe (vedi stringobject.c). Vedi questa discussione: Can isdigit legitimately be locale dependent in C

Apparentemente, ha a che fare con cifre in apice, come 0xB2 ('²'), 0xB3 ('³') e 0xB9 ('¹').

HTH

Problemi correlati