들어가며
입력 받은 값, 혹은 전달 받은 값이 어떤 자료형 인지 검사할 때가 있습니다.
파이썬 자료형 검사 함수들에는 type(), isinstance(), isdigit(), isnumeric() 등이 있는데요.
유사한 기능들이기에 상황에 따라 번갈아 가면서 쓰기도 했습니다.
이번 포스트에서는 파이썬에서 자료형 검사를 도와주는 함수들과 이들의 차이에 대해 정리해보았습니다.
type()
type()
함수는 객체의 유형을 클래스로 반환합니다.
x = 5
print(type(x)) # Output: <class 'int'>
isinstance()
isinstance()
함수는 객체가 지정된 클래스 또는 해당 하위 클래스의 인스턴스인지 확인합니다.
(파이썬에서는 int, str도 모두 클래스라는 사실에 주목 합니다.)
x = 5
print(isinstance(x, int)) # Output: True
다른 자료형, 자료 구조도 isinstance() 함수를 이용해서 체크할 수 있습니다.
heapq 자료구조는 list로 검사하는 것에 유의하세요.
from collections import deque
import heapq
import numpy as np
import pandas as pd
# Declare variables
my_deque = deque([1, 2, 3])
my_heap = [5, 7, 3, 1]
my_list = [1, 2, 3, 4, 5]
my_dict = {'a': 1, 'b': 2}
my_array = np.array([1, 2, 3])
my_df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'c']})
# Check if variables are instances of specific data structures
print(isinstance(my_deque, deque)) # Output: True
print(isinstance(my_heap, list)) # Output: True
print(isinstance(my_list, list)) # Output: True
print(isinstance(my_dict, dict)) # Output: True
print(isinstance(my_array, np.ndarray)) # Output: True
print(isinstance(my_df, pd.DataFrame)) # Output: True
앞서 말씀 드린 것처럼 객체가 해당 하위 클래스의 인스턴스인지도 확인 할 수 있습니다.
class Animal:
pass
class Dog(Animal):
pass
obj = Dog()
print(isinstance(obj, Dog)) # Output: True
print(isinstance(obj, Animal)) # Output: True
isalpha()
**isalpha()**
함수는 문자열에 알파벳 문자만 포함되어 있는지 확인 합니다.
z = "abc"
print(z.isalpha()) # Output: True
isnumeric()
isnumeric()
메소드는 문자열이 숫자로 간주되는 경우를 확인 합니다.
문자열 자료형에 숫자 데이터가 있는지 검사한다는 사실에 유의합니다. integer, float 자료형인지 확인하는 게 아닙니다.
문자열의 모든 문자가 숫자(예: 유니코드에서 숫자로 간주되는 숫자 및 문자)인 경우 ‘True’를 반환합니다.
또한 위 첨자 및 아래 첨자와 같은 다른 숫자 문자도 포함됩니다.
그러나 문자열에 구두점이나 공백과 같이 숫자가 아닌 문자가 포함되어 있으면 ‘False’를 반환합니다.
str1 = "12345" # Only numeric characters
str2 = "١٢٣٤٥" # Arabic-Indic digits
str3 = "½" # Unicode fraction
str4 = "Ⅳ" # Roman numeral
str5 = "12345abc" # Mixed alphanumeric
str6 = "0.001231" # float
print(str1.isnumeric()) # Output: True
print(str2.isnumeric()) # Output: True
print(str3.isnumeric()) # Output: True
print(str4.isnumeric()) # Output: True
print(str5.isnumeric()) # Output: False
print(str6.isnumeric()) # Output: False
isdigit()
이 메소드는 문자열의 모든 문자가 십진수(0-9)인 경우 ‘True’를 반환합니다.
문자열 자료형에 십진수(0~9) 데이터가 있는지 검사한다는 사실에 유의합니다. integer, float 자료형인지 확인하는 게 아닙니다.
isnumeric()
과 달리 다른 숫자나 위 첨자/아래 첨자를 숫자로 간주하지 않습니다.
문자열에 숫자가 아닌 문자가 포함되어 있으면 ‘False’를 반환합니다.
실수도 ‘False’로 반환 합니다.
str1 = "12345" # Only numeric characters
str2 = "١٢٣٤٥" # Arabic-Indic digits
str3 = "½" # Unicode fraction
str4 = "Ⅳ" # Roman numeral
str5 = "12345abc" # Mixed alphanumeric
str6 = "0.001231" # float
print(str1.isdigit()) # Output: True
print(str2.isdigit()) # Output: False
print(str3.isdigit()) # Output: False
print(str4.isdigit()) # Output: False
print(str5.isdigit()) # Output: False
print(str6.isdigit()) # Output: False
마치며
isalpha(), isnumeric(), isdigit()은 함수가 아니라 문자열의 매소드임을 글을 정리면서 알게 되었습니다.
또한 type()은 직관적으로 자료형을 확인하는 데 사용하지만 isintance() 함수는 하위 클래스의 인스턴스인지도 확인 할 수 있다는 사실을 추가로 알게 되었습니다