지식
Python
타입 변환: int, str, float, list 상호 변환
Python의 명시적 타입 변환(int, float, str, list, set, dict, bool)과 암묵적 변환을 이해하고, ValueError/TypeError를 안전하게 처리하는 패턴을 정리합니다.
지난 글에서 집합 자료구조를 살펴봤다. 이번에는 Python의 **타입 변환(type conversion)**을 체계적으로 정리한다. Python은 동적 타입 언어이지만 암묵적 변환은 거의 허용하지 않는다. 대부분 명시적으로 변환 함수를 호출해야 한다.
숫자 타입 변환
# str → int
int("42") # 42
int("0b1010", 2) # 10 (2진수)
int("0o17", 8) # 15 (8진수)
int("0xff", 16) # 255 (16진수)
int("ff", 16) # 255
# float → int (소수점 아래 버림, 반올림 아님)
int(3.9) # 3
int(-3.9) # -3
# int → float
float(42) # 42.0
float("3.14") # 3.14
float("inf") # inf
float("nan") # nan
# str ↔ int
str(42) # "42"
str(3.14) # "3.14"
str(True) # "True"
bool 변환
bool(0) # False
bool(1) # True
bool(-1) # True (0 이외 정수는 모두 True)
bool("") # False
bool("hello") # True
bool([]) # False
bool([0]) # True (원소가 있으면 True)
bool(None) # False
bool(x)는 x.__bool__() 또는 x.__len__()을 호출한다.
컨테이너 타입 변환
# str → list (문자 단위 분리)
list("abc") # ['a', 'b', 'c']
# 이터러블 → list/tuple/set
list(range(5)) # [0, 1, 2, 3, 4]
tuple({1, 2, 3}) # (1, 2, 3) — 순서 비보장
set([1, 2, 2, 3]) # {1, 2, 3}
# (key, value) 쌍 → dict
dict([("a", 1), ("b", 2)]) # {"a": 1, "b": 2}
dict(zip("abc", [1, 2, 3])) # {"a": 1, "b": 2, "c": 3}
# list → str (join으로)
"".join(["a", "b", "c"]) # "abc"
", ".join(["x", "y"]) # "x, y"
암묵적 변환
Python은 대부분 암묵적 변환을 하지 않는다.
"age: " + 30 # TypeError! str + int 불가
"age: " + str(30) # "age: 30" — 명시적 변환 필요
# 예외: bool은 int의 서브클래스
True + 1 # 2 (True=1)
False + 5 # 5 (False=0)
변환 오류와 안전한 처리
int("3.14") # ValueError: invalid literal for int()
int("hello") # ValueError
int([1, 2]) # TypeError
# 안전한 패턴
def safe_int(s, default=None):
try:
return int(s)
except (ValueError, TypeError):
return default
safe_int("42") # 42
safe_int("3.14") # None
safe_int("hi", 0) # 0
진수 변환
# 정수 → 진수 문자열
bin(10) # '0b1010'
oct(255) # '0o377'
hex(255) # '0xff'
# 0b/0o/0x 접두사 없애기
format(255, 'b') # '11111111'
format(255, 'x') # 'ff'
format(255, 'X') # 'FF'
f"{255:08b}" # '11111111' (8자리 0 패딩)
chr, ord — 문자 ↔ 코드포인트
ord('A') # 65
ord('가') # 44032
chr(65) # 'A'
chr(44032) # '가'
지난 글: 집합과 frozenset: 중복 없는 컬렉션
다음 글: 참·거짓값(Truthy/Falsy): Python 조건식 완전 이해
읽어주셔서 감사합니다. 😊