[python] 2 vs 3

nayoon·2021년 5월 12일
2

computer

목록 보기
10/25

알아보게 된 이유

지금까지 나는 python2와 python3을 구분하지 않고 python을 쓴다고만 했다. 나는 늘 python3을 쓰고 있었는데, 아마 대학교 1학년 컴퓨터 사고 시간에 python3로 python을 처음 접해서 그런 것 같다.

과거에 2와 3의 차이는 잘 모르는데 관련 자료를 찾아보다가 문법이 좀 다른 것들을 보고 "버전이 올라가면서 문법이 좀 바뀌었나보다.. 나는 3써야하는구낭.." 라고 막연하게 생각했다.

최근 CS 공부를 열심히 해야겠다는 생각이 들어서 내가 주로 사용하는 것들을 지금처럼 얕게가 아닌 깊게 알아야겠다고 다짐했는데, 오늘 모빈켈님 글을 읽다가 방금 전 결심 이후 한번 더 팩트로 두드려 맞고.. python2와 3의 차이부터 알아보려고 한다..

Python 2 vs 3

https://pythonfundu.blogspot.com/2019/02/python-2-vs-3.html

위의 페이지 상단에 보면 다음과 같은 말이 쓰여져있다.

파이썬 2.7은 2020년 1월 1일에 수명을 다한다. Python 2.7 이후로는 Python 2.7이 유지되지 않으므로 Python을 업그레이드하십시오. Pip의 미래 버전은 Python 2.7을 지원하지 않을 것이다.

Python 2.0은 2000에 처음 릴리즈되었고, 최신 버전인 2.7은 2010에 릴리즈되었다.
Python 3.0은 2008에 처음 출시되었고 현재는 2020에 3.9가 릴리즈되었다.

python 페이지에 다음과 같이 활성 파이썬 릴리즈 정보가 적혀 있다.

2018년 당시 Python 2과 Python 3의 차이에 대한 그림이다

(대높고 legacy라고 한다)

1. Python 2는 Legacy(유산)고, Python 3는 Future(미래)다..!

Python 2가 여전히 자리잡고 있지만 Python 2에서 Python 3로 회사들이 넘어가고 있기 때문에 Python을 처음 배우는 초심자는 Python 3를 배우는 것을 추천합니다.

2. Python 2와 Python 3는 라이브러리에서 차이가 있는데, 호환되지 않는 경우도 더러 존재합니다.

Python 3가 Future(미래)기 때문에 오늘날 많은 개발자들이 Python 3만을 위한 라이브러리를 만들고 있습니다.

또한, Python 2를 위해 만들어진 예전 라이브러리들은 forwards-compatible(순방향 호환)이 되지 않습니다.

그냥 2.x 라이브러리에서 3.x 라이브러리에 맞춰 복사하고 옮겨가면 된다고 생각하겠지만, 어렵고 복잡한 일입니다.

3. Python 3가 Unicode를 처리함에 더욱 편리합니다.

Python 3에서는 기본적으로 문자열은 Unicode입니다.

Python 2에서는 문자열을 기본적으로 ASCII로 저장하고 있고 Unicode로 저장하고 싶다면 "u"를 붙여야 합니다.

Unicode를 처리하는 것이 편리한가가 중요한 이유는 ASCII보다 Unicode가 훨씬 유용하기 때문입니다.

Unicode 문자열은 외국 언어, 숫자, 기호, 이모티콘 등을 모두 저장할 수 있기 때문입니다.

## Python 2에서는 Bytes는 str과 같은 것이지만,
## Python 3에서는 Bytes와 str는 다른 것입니다.

# python 2
>> print type('default string')
<type 'str'>
>> print type(b'string with b')
<type 'str'>

# python 3
>> print type('default string')
<class 'str'>
>> print type(b'string with b')
<class 'bytes'>

## Python 2에서는 Unicode와 str이 다른 것이지만,
## Python 3에서는 Unicode와 str은 같은 것입니다.

# python 2
>> print type('default string')
<type 'str'>
>> print type(u'string with b')
<type 'unicode'>

# python 3
>> print type('default string')
<class 'str'>
>> print type(u'string with b')
<class 'str'>

4. Python 3가 향상된 정수 나눗셈 기능을 가지고 있습니다.

Python 2에서는 정수에 나눗셈을 하면 가장 가까운 정수까지 반올림을 합니다. 소수점이 있으면 반올림하지 않습니다.

>> 5 / 2
2

>> 5.0 / 2.0
2.5

하지만 Python 3에서는 소수점 뒤에 0을 붙일 걱정할 필요없게 반올림 해주지 않습니다.

>> 5 / 2
2.5

Python 3가 훨씬 직관적이고 처음 Python 프로그래밍을 배우는 사람에게 쉽습니다.

5. 두 버전은 print 명령어 문법이 다릅니다.

그저 문법적인 차이라서, 대수롭지 않게 여길 수 있기에 파이썬의 기능에 영향을 미치지 않습니다.
그렇지만 print 'A'라고 하는 것과 print('A')는 반드시 알고 넘어가야 할 차이입니다.

기본적으로 Python 3에서는 print 명령어가 print() 기능으로 대체되었습니다.

예를 들어, Python 2에서는 print "hello" 지만 Python 3에서는 print("hello")입니다.

# python 2
>> print 'A'
A

# python 3
>> print('A')
A

6. xrange

Python 2에서는 xrange와 range를 모두 사용했지만, Python 3에서는 range만 사용합니다.

# python 2
>> for x in xrange(1, 5):
>> 	print(x)
1 2 3 4

>> for x in range(1, 5):
>> 	print(x)
1 2 3 4


# python 3
>> for x in range(1, 5):
>> 	print(x)
1 2 3 4


## python 3에서 xrange를 사용하면 아래와 같이 나온다고 합니다.
Output in Python 3.x 
NameError: name 'xrange' is not defined 

7. Error Handling

에러를 처리할 때에도 Python 2와 Python 3는 다릅니다.
아래와 같이 ,와 as를 넣어주는 것이 다릅니다.

try: 
 trying_to_check_error 
except NameError, err: 
 print err, 'Error Caused' # Would not work in Python 3.x 


# python 2
Output in Python 2.x: 
name 'trying_to_check_error' is not defined Error Caused 


# python 3
Output in Python 3.x : 
File "a.py", line 3 
 except NameError, err: 
     ^ 
SyntaxError: invalid syntax 


try: 
 trying_to_check_error 
except NameError as err: # 'as' is needed in Python 3.x 
 print (err, 'Error Caused') 


# python 2
Output in Python 2.x: 
(NameError("name 'trying_to_check_error' is not defined",), 'Error Caused') 


# python 3
Output in Python 3.x : 
name 'trying_to_check_error' is not defined Error Caused 

8. __future__ module

__future__ 모듈을 사용하면 Python 2의 작업을 Python 3로 사용할 수 있다.

# python 2
from __future__ import division 

print 7 / 5
print -7 / 5

from __future__ import print_function  

print('GeeksforGeeks') 

참고사이트

  1. 하늘을 찢는 코딩 학원 광고
  2. Python 2 vs 3
profile
뚜벅뚜벅 열심히 공부하는 개발자

2개의 댓글

comment-user-thumbnail
2021년 5월 12일

그 부분에서 흠칫했던게 저뿐만이 아니였군요..ㅋㅋㅋ 잘 읽고 갑니다 !

답글 달기
comment-user-thumbnail
2021년 5월 13일

궁금했던 부분인데! 정리잘해주셔서 감사합니다~!

답글 달기