본문 바로가기

python

[Python] isdecimal(), isdigit(), isnumeric() 함수에 대한 설명

isdecimal(), isdigit(), isnumeric() 전수 앞에 is 접두사가 붙어있는걸 보면 알겠지만, 입력받은 대상의 상태를 검사하여 참거짓을 판단하는 함수이다.

decimal=소수

digit=숫자

numeric= 수

라는 뜻을 지니고 있다.

이 함수들의 중요한 점은 입력받은(=검사할 대상)들이 '문자열'이어야 작동한다는 점에 있다. 일반 정수로 입력될경우 작동하지 않는다.

 

예제를 몇 개 실행해보자.

 

a = '123'
print(a.isdigit())
print(a.isdecimal())
print(a.isnumeric())

숫자로만 구성된 문자열이 함수에 사용될 경우 모두 결과는 True 로 나온다.

a = 123
print(a.isdigit())
print(a.isdecimal())
print(a.isnumeric())

하지만 이 경우에는 아예 작동하지 않는다. 문자열이 아니기 때문이다.

따라서 이 함수들은 어디서 주로 쓰이느냐? 바로 데이터베이스를 구축할때 입력받는 데이터가 숫자로만 구성된 문자열을 처리할 때 주로 쓰인다.

왜냐하면 정수로 입력받을시 데이터 처리가 느려지거나, 혹은 입력되어 DB에 저장된 변수들이 정수처리가 되어 오류가 일어나는 것을 방지하는 역할을 하기도 한다.(EX: 생년월일, 주민등록번호 앞자리와 뒷자리)

도중에 문자열을 통해 구분하거나 아예 따로 칸을 두어 구분하게 입력하는 것이 더 분류하기 쉽기도 하고...

 

하지만 이 경우에도 예외가 하나 있다. 거듭제곱의 형태다.

 

a = '2²'
print(a.isdigit())
print(a.isdecimal())
print(a.isnumeric())

 

이 예제의 결과는 isdecimal의 경우만 false로 출력된다. 왜 그럴까?

그 이유는 isdigit() 함수는 단일 글자가 '숫자' 모양으로 생겼으면 무조건 True를 반환하는 함수. 즉, 숫자처럼 생긴 '모든 글자'를 숫자로 친다.

그에 비해 isdecimal() 함수는 주어진 문자열이 int형으로 변환이 가능한지 알아내는 함수이기 때문에 특수문자 중 숫자모양을 숫자로 치지않는다.

isnumeric() 함수는 숫자값 표현에 해당하는 문자열까지 인정한다. 제곱근 및 분수, 거듭제곱 특수문자도 isnumeric() 함수는 True를 반환하는 것을 알 수 있다.