2012-07-02 6 views
5

Python имеет функцию для строки, чтобы проверить, являются ли все символы цифрами: string.isdigit().Как и почему зависит от языка string.isdigit()?

В мануале написано:

Для 8-битовых строк, этот метод Локальнозависимый

Как этот метод локали мере зависят? В каких локалях есть цифры, которые находятся за пределами диапазона 0-9?

Кроме того, если это зависит от языка, существует ли у python метод для проверки его с определенной локалью (то есть только 0-9 цифр).

+3

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

+0

Я думаю, что в руководстве просто означает, что фактические 8-битные коды символов локали-зависимых, не то, что персонажи Арен 't 0-9. – martineau

ответ

1

У python есть метод проверки его с определенной локалью (то есть только 0-9 цифр).

Самый простой способ:

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

Вы также можете проверить ord, он может быстрее (isn't):

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

Глядя на глобальную функцию и вызывая ее три раза, не должно быть быстрее, чем загрузка локального и выполнение 10-символьных сравнений в C. – delnan

+0

Yup, первая быстрее. добавленный критерий – Kos

+0

Это проверяет только символ, а не целую строку цифр. –

4

CPython использует функцию C "isdigit" для метода is_digit для строк (см. stringobject.c). См. Эту статью: Can isdigit legitimately be locale dependent in C

По-видимому, это связано с цифрами верхнего индекса, такими как 0xB2 ('²'), 0xB3 ('³') и 0xB9 ('¹').

НТН

Смежные вопросы