Python 2.x는 더 이상 지원되지 않는 레거시 버전이며, Python 3.x는 현재 그리고 앞으로의 파이썬 표준입니다. Python 2의 공식 지원은 이미 종료되었으므로, 새로운 프로젝트라면 반드시 Python 3를 사용하는 것이 좋습니다.
Python 3.x에만 있는 주요 기능
다음은 Python 3.x 릴리스에서만 사용할 수 있고 Python 2.x에서는 제공되지 않는 대표적인 기능들입니다.
문자열이 기본적으로 유니코드로 처리됨
유니코드(str)와 바이트(bytes)의 명확한 분리
예외 체이닝(exception chaining) 지원
함수 어노테이션(function annotations)
키워드 전용 인자(keyword-only arguments) 문법
확장된 튜플 언패킹(extended tuple unpacking)
nonlocal을 활용한 비지역(non-local) 변수 선언
핵심 차이점 살펴보기
1. print 구문 vs print 함수
Python 2에서 'print'는 함수가 아닌 문(statement)으로 취급됩니다. 따라서 출력할 텍스트를 괄호로 감쌀 필요가 없으며, 원한다면 감싸도 무방합니다. 반면 Python 3에서 print는 함수이므로, 출력하고자 하는 항목을 반드시 괄호 안에 넣어 전달해야 합니다.
2. 리스트 컴프리헨션의 변수 스코프
Python 2.x에서는 리스트 컴프리헨션(list comprehension)에서 순회하는 변수를 전역 변수와 같은 이름으로 사용하면, 해당 전역 변수의 값이 의도치 않게 변경될 수 있습니다. Python 3.x에서는 컴프리헨션 내부의 변수가 별도의 스코프를 가지므로 이러한 부작용이 발생하지 않습니다.
3. 정수 나눗셈(Integer Division)
Python 2는 소수점 이하 자릿수 없이 입력된 숫자를 정수(integer)로 취급하기 때문에, 나눗셈 결과가 예상과 다르게 나올 수 있습니다. 예를 들어 3/2의 결과는 Python 3에서는 1.5, Python 2에서는 1입니다.
Python 3에서 정수 나눗셈을 수행하려면 // 연산자를 사용해야 하며, 반대로 Python 2에서 실수(float) 나눗셈을 하려면 식에 포함된 숫자 뒤에 소수점과 0을 붙여야 합니다(예: 3.0/2).
마무리
Python 2에서 Python 3으로 넘어오면서 바뀐 기능은 위에서 소개한 것 외에도 매우 많습니다. 모든 세부 변경 사항을 확인하고 싶다면 공식 문서인 What's New in Python 3 페이지를 참고하시기 바랍니다.