파이썬 2.6의 상위 호환성 기능

파이썬 역사상 가장 큰 개혁인 3.0이 발표된 지 이제 한 달이 되어 갑니다. 이번 업데이트는 워낙 변한 것이 많아서 파이썬 개발팀 내부에서도 실제 개발에 적용되려면 2년은 걸릴 것으로 보고 있는데요. 그래서 중간 징검다리로 파이썬 2.6이 3.0을 전후로 발표되었습니다. 2.6에는 3.0 대비에 대한 기능이 많이 들어갔는데, 이 부분만 간단하게 맛보기로 소개해 드립니다~

파이썬 3.0 호환 대비 옵션

파이썬 2.6에서는 3.0에 대비하는 개발자의 편의를 위해서 -3 옵션을 지원합니다. 파이썬을 띄울 때 -3 옵션을 주면 3.0 호환성 경고가 뜹니다. 예를 들면 이렇게요~

cysteine(perky):~% python2.6 -3
Python 2.6.1 (r261:67515, Dec  6 2008, 18:40:24) 
[GCC 4.2.1 20070719  [FreeBSD]] on freebsd7
>>> `1`
<stdin>:1: SyntaxWarning: backquote not supported in 3.x; use repr()
'1'
>>> reduce(lambda x, y: x + ',' + y, 'hehe')
__main__:1: DeprecationWarning: reduce() not supported in 3.x; use functools.reduce()
'h,e,h,e'
>>> {'egg': None}.has_key('spam')
__main__:1: DeprecationWarning: dict.has_key() not supported in 3.x; use the in operator
False

이렇게 파이썬 3.0에서 없어지면서 대체할 수 있는 것을 쓰면 경고가 뜹니다. 옵션으로 주지 않고 프로그램 안에서 옵션을 넣어준 것 처럼 하려면 sys.py3kwarning 을 True로 설정해 주면 됩니다. 프로그램 안에서는 sys.py3kwarning을 보면 -3이 설정되었는지 알 수 있지만, 파이썬이 뜨고 나서는 바꿀 수 없습니다.

파이썬 3.0 호환 빌트인 함수

파이썬 3.0에서 새로 생기거나 동작이 바뀌는 빌트인 함수를 2.6에서 미리 쓸 수 있습니다. 그냥 3.0을 바로 쓰는 것과 무슨 차이냐 하면, 기존 2.x용으로 개발된 프로그램 안에서도 모듈 하나 안에서만 선택적으로 빌트인 함수를 3.0 것으로 바꿔서 3.0인 것처럼 쓸 수 있는 것이죠. 하나씩 이렇게 3.0용으로 바꾸다보면 돌아가는 상태를 유지한 채로 2.x에서 3.0용으로 부드럽게 넘어갈 수도 있고요~

future_builtins 모듈이 파이썬 3.0 빌트인 함수를 제공합니다.

>>> from future_builtins import *
>>> map(int, '12345')   # 파이썬 3에서 이터레이터로 바뀌는 map
<itertools.imap object at 0x833deec>
>>> _.next()
1
>>> ascii('한')   # 기존의 repr()을 대체하는 ascii()
"'\\xed\\x95\\x9c'"

파이썬 3.0에서 바뀌는 문법 미리 맛보기

파이썬 3.0에서 바뀌는 print나 유니코드 문자열, 바이트 문자열 같은 것들을 모듈 단위로 미리 쓸 수도 있습니다. 마찬가지로 부분 부분 대처를 해서 3.0용으로 부드럽게 넘어갈 수 있겠죠.

유니코드 문자열
>>> ('산타', len('산타'))
('\xec\x82\xb0\xed\x83\x80', 6)
>>> from __future__ import unicode_literals
>>> '산타', len('산타')
(u'\uc0b0\ud0c0', 2)
print 함수
>>> print('한글', 1)
(u'\ud55c\uae00', 1)
>>> from __future__ import print_function
>>> print('한글', 1)
한글 1
None

어때요! 한 번 해보고 싶으시죠!

다음에는 파이썬 3.0 호환성과 직접적인 관련은 없는 2.6의 새로운 기능을 소개해 드리겠습니다~

댓글 9 개 | 트랙백 0 개 (보낼곳) | 태그 python

관련 글:
   1. 파이썬 3


트랙백
트랙백이 없습니다.
댓글
이정민  ▒
sys.py3kwarning를 True로 바꿔도 -3 옵션처럼 동작하지 않습니다.
2008-12-26 09:10
오 그렇네요. 고쳤습니다. 감사합니다. ^_^
2008-12-26 10:20
하얀말  ▒
왓! Java장이가 Python 좀 배워보겠다고 '열혈강의 파이썬' 책도 샀는데... 그 책 얼렁 봐야겠군요!!!!(사 놓고 쳐박아만 놓은게 어언... 반성반성)
2008-12-26 13:41
지환  ▒
파이썬 공부 좀 해보려고 책을 샀는데...
이젠 새로운 거 공부하기가 왜이리 힘드냐?
아, 나도 생활 속의 프로그래밍을 좀 하고 싶구만...
2008-12-26 13:52
리봉댕구  ▒
Guido 아저씨가 PEP239와 PEP240을 부결[1,2]한 이후, 나름 혼자서 유리수 (혹은 algebraic number) 타입과 이에 대한 몇가지 표현법/해석법(예를 들어 순환 소수)을 담은 작은 미완성 모듈을 만들어서 쓰고 있었는데...

2.6에 fractions 모듈[3]이 생겼군요!!

살짝 충격받은 상태입니다. 당시의 논조와 이후 decimal 모듈의 채용 등등으로 미루어... Python 코어나 표준 모듈에는 아마 영원히 exact arithmetic을 포함시키지 않을줄 알았는데 말이죠. oTL

PS: 충격 운운은 당연히 농담이고, 저로서는 제일 반가운 모듈입니다. ;)

[1] http://www.python.org/dev/peps/pep-0239/
[2] http://www.python.org/dev/peps/pep-0240/
[3] http://docs.python.org/library/fractions.html
2008-12-26 15:58
http://freethesky.pe.kr  ▒
파이썬을 공부 할려고 이리 저리 둘러보아도 3.0에 대해 자세히 나온데는 거의 없더라구요 ㅎㅎ

2.5를 배워야 할지..3.0을 배워야 할지..기본은 같은데 문법쓰는게 차이가 나서 ㅠㅠ
역시 고민만 하고 있는....
2008-12-29 12:20
한두번  ▒
이런 질문 드려도 될 지 모르겠는데..혹시 파이썬 공부할 때 강추해주실 만한 튜토리얼이나 책이 있나요? (영문도 상관없습니다.) 2.5, 2.6, 3.0 버전도 다양해서 뭘 먼저 해야할 지 감을 못잡겠네요..^^;;
2009-01-04 21:28
freethesky님: 2.6을 배우시는게 좋습니다.

한두번님: 다른 언어를 하나 이상 잘 다루고 계시다면 Python Essential Reference, 아니라면 파이썬 튜토리얼 (표준 문서)나 Python Programming for the Absolute Beginner를 추천합니다.
2009-01-07 14:48
크로이세  ▒
필요한 모듈이 파이썬 3.0을 지원하지 않아서 곤란해하던 차에, 이 글을 보고 짜던 코드를 2.6으로 역포팅해 봤습니다만... 다 좋은데 nonlocal이 없어서 난감하네요. ㅠㅠ
어쨌든 좋은 글 감사합니다. :)
2009-01-07 17:27

글이 올라온 지 30일이 지나 새 댓글은 쓸 수 없습니다.

누구?

장혜식 (Hyeshik Chang)
내일을 사랑하는 소년(!)

최근 댓글