Python 2.7.x vs Python 3.x

|

Python 2.7.x 버전과 Python 3.x 버전의 차이점을 간단하게 적어봅니다. 생각보다 많은 것들이 바뀌어서 혼란을 가져올 수 있는 부분들이 꽤 있습니다. ‘두 버전 중에 어느 버전이 더 좋은건가’라고 하면 아무래도 좀 더 많은 부분이 개선된 3.x 버전을 사용하는 것이 더 좋습니다. 하지만, 2.7.x 버전도 많이 사용하고 있고 시중에 나와 있는 많은 교재들도 2.7.x 버전 위주로 설명하고 있는 부분이 많아서 버전별 차이점은 조금 알고 있어야 할 것 같습니다.

Python Wiki에 따르면 다음과 같은 경우에는 2.7.x 버전을 사용하는 것이 더 좋다고 설명하고 있습니다.

  • 개발한 내용을 어딘가에 배포할 때, 그 환경을 제어할 수 없는 경우(예를 들어 2.7.x 버전만 사용가능한 환경인 경우)
  • 특정 라이브러리나 유틸리티 등을 사용할 때, 해당 라이브러리가 3.x 버전을 지원하지 않는 경우

즉, 대부분은 그냥 3.x 버전을 사용하는 편이 더 나을 것 같습니다.

자, 그럼 Python 2.7.x 버전과 Python 3.x 버전의 차이점을 살펴보도록 하겠습니다. 더 많은 정보는 여기를 참조하시길 바랍니다.


Python 2.7.x과 Python 3.x의 차이점

print

Python 3.x 버전은 print 문에 대해 괄호를 필요로 합니다.

예를 들어, 2.7.x 버전에서는 다음과 같은 코드를 사용할 수 있었습니다.

print 'Hello, Python!'
print('Hello, Python!')
print "Hello",;
print 'snowdeer'

하지만, 3.x 버전에는 무조건 괄호가 있어야 하며, 다음과 같이 작성해야 합니다.

print('Hello, Python!')
print("Hello ", end="")
print 'snowdeer'


자동 형 변환

Python 2.7.x 버전에서는 자동으로 형 변환을 하지 않지만, 3.x 버전에서는 자동 형 변환을 지원합니다.

예를 들어, 다음 코드의 실행 결과는

print ('3 / 2 =', 3 / 2)

2.7.x 버전에서는 ‘1’ 이 출력되지만, 3.x 버전에서는 ‘1.5’가 출력됩니다.


인코딩

Python 3.x 버전 부터는 소스 코드의 인코딩이 기본적으로 ‘utf-8’이기 때문에 소스 코드 첫 줄에 다음과 같은 라인이 생략되어져도 됩니다.

# -*- coding: utf-8 -*-


input

Python 2.7.x에서 사용자 입력은 다음과 같은 함수를 사용했었습니다.

name = raw_input("input name:")

하지만 3.x 버전에서는 다음 함수를 사용하면 됩니다.

name = input("input name:")


Exception Handling

Python 2.7.x 버전에서는 예외 처리 코드를 다음과 같이 사용했다면,

print 'Exception Handling'
try:
    let_us_cause_a_NameError
except NameError, err:
    print err, '--> our error message'

 

3.x 버전에는 다음과 같은 코드로 사용해야 합니다.

print 'Exception Handling'
try:
    let_us_cause_a_NameError
except NameError as err:
    print(err, '--> our error message')