2012-07-02 6 views
5

파이썬은 문자열이 모든 문자가 숫자인지 여부를 테스트하는 함수를 가지고 있습니다 : string.isdigit(). 수동에서 왜 어떻게 string.isdigit() 로케일이 필요합니까?

이 기록됩니다

8 비트 문자열에 대한

,이 방법은 로케일에 의존

방법이 방법은 로케일 depedent입니까? 어떤 로케일에 0-9 범위를 벗어나는 숫자가 있습니까?

또한 로캘에 따라 다르면 특정 지역 (즉, 0-9 자리 숫자)으로 파이썬을 검사하는 방법이 있습니다.

+3

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

+0

난 그냥 실제 8 비트 문자 코드가 문자가 때로 믿을 수없는 것을, 로케일에 의존하는 것을 의미 매뉴얼을 생각한다 '0-9. – martineau

답변

1

파이썬에는 특정 로케일 (즉, 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

전역 함수를 찾고이를 세 번 호출하면 C에서 로컬을로드하고 10 자 비교하는 것보다 빠르지 않아야합니다. – delnan

+0

그래, 첫 번째가 더 빠릅니다. 추가 된 벤치 마크 – Kos

+0

이것은 전체 자릿수가 아닌 문자 만 검사합니다. –

4

CPython과는 C 함수를 사용합니다 "isdigit에" 문자열에 대한 is_digit 메소드 (stringobject.c 참조). 관련 스레드 참조 : Can isdigit legitimately be locale dependent in C

분명히 0xB2 ('²'), 0xB3 ('³') 및 0xB9 ('¹')와 같은 위 첨자 숫자와 관련이 있습니다.

HTH