파이썬 역사상 가장 큰 개혁인 3.0이 발표된 지 이제 한 달이 되어 갑니다.
이번 업데이트는 워낙 변한 것이 많아서 파이썬 개발팀 내부에서도 실제 개발에 적용되려면 2년은
걸릴 것으로 보고 있는데요. 그래서 중간 징검다리로 파이썬 2.6이 3.0을 전후로
발표되었습니다. 2.6에는 3.0 대비에 대한 기능이
많이 들어갔는데, 이 부분만 간단하게 맛보기로 소개해 드립니다~
파이썬 3.0 호환 대비 옵션
파이썬 2.6에서는 3.0에 대비하는 개발자의 편의를 위해서 -3 옵션을 지원합니다.
파이썬을 띄울 때 -3 옵션을 주면 3.0 호환성 경고가 뜹니다. 예를 들면 이렇게요~
1 2 3 4 5 6 7 8 9 10 11 12 |
<span class="n">cysteine</span><span class="p">(</span><span class="n">perky</span><span class="p">):</span><span class="o">~%</span> <span class="n">python2</span><span class="o">.</span><span class="mf">6</span> <span class="o">-</span><span class="mf">3</span> <span class="n">Python</span> <span class="mf">2.6</span><span class="o">.</span><span class="mf">1</span> <span class="p">(</span><span class="n">r261</span><span class="p">:</span><span class="mf">67515</span><span class="p">,</span> <span class="n">Dec</span> <span class="mf">6</span> <span class="mf">2008</span><span class="p">,</span> <span class="mf">18</span><span class="p">:</span><span class="mf">40</span><span class="p">:</span><span class="mf">24</span><span class="p">)</span> <span class="p">[</span><span class="n">GCC</span> <span class="mf">4.2</span><span class="o">.</span><span class="mf">1</span> <span class="mf">20070719</span> <span class="p">[</span><span class="n">FreeBSD</span><span class="p">]]</span> <span class="n">on</span> <span class="n">freebsd7</span> <span class="o">>>></span> <span class="sb">`1`</span> <span class="o"><</span><span class="n">stdin</span><span class="o">></span><span class="p">:</span><span class="mf">1</span><span class="p">:</span> <span class="ne">SyntaxWarning</span><span class="p">:</span> <span class="n">backquote</span> <span class="ow">not</span> <span class="n">supported</span> <span class="ow">in</span> <span class="mf">3.</span><span class="n">x</span><span class="p">;</span> <span class="n">use</span> <span class="nb">repr</span><span class="p">()</span> <span class="s">'1'</span> <span class="o">>>></span> <span class="nb">reduce</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">x</span> <span class="o">+</span> <span class="s">','</span> <span class="o">+</span> <span class="n">y</span><span class="p">,</span> <span class="s">'hehe'</span><span class="p">)</span> <span class="n">__main__</span><span class="p">:</span><span class="mf">1</span><span class="p">:</span> <span class="ne">DeprecationWarning</span><span class="p">:</span> <span class="nb">reduce</span><span class="p">()</span> <span class="ow">not</span> <span class="n">supported</span> <span class="ow">in</span> <span class="mf">3.</span><span class="n">x</span><span class="p">;</span> <span class="n">use</span> <span class="n">functools</span><span class="o">.</span><span class="n">reduce</span><span class="p">()</span> <span class="s">'h,e,h,e'</span> <span class="o">>>></span> <span class="p">{</span><span class="s">'egg'</span><span class="p">:</span> <span class="bp">None</span><span class="p">}</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s">'spam'</span><span class="p">)</span> <span class="n">__main__</span><span class="p">:</span><span class="mf">1</span><span class="p">:</span> <span class="ne">DeprecationWarning</span><span class="p">:</span> <span class="nb">dict</span><span class="o">.</span><span class="n">has_key</span><span class="p">()</span> <span class="ow">not</span> <span class="n">supported</span> <span class="ow">in</span> <span class="mf">3.</span><span class="n">x</span><span class="p">;</span> <span class="n">use</span> <span class="n">the</span> <span class="ow">in</span> <span class="n">operator</span> <span class="bp">False</span> |
이렇게 파이썬 3.0에서 없어지면서 대체할 수 있는 것을 쓰면 경고가 뜹니다.
옵션으로 주지 않고 프로그램 안에서 옵션을 넣어준 것 처럼 하려면 프로그램 안에서는 sys.py3kwarning을 보면
sys.py3kwarning 을 True로 설정해 주면 됩니다.
-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 빌트인 함수를 제공합니다.
1 2 3 4 5 6 7 |
<span class="o">>>></span> <span class="kn">from</span> <span class="nn">future_builtins</span> <span class="kn">import</span> <span class="o">*</span> <span class="o">>>></span> <span class="nb">map</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="s">'12345'</span><span class="p">)</span> <span class="c"># 파이썬 3에서 이터레이터로 바뀌는 map</span> <span class="o"><</span><span class="n">itertools</span><span class="o">.</span><span class="n">imap</span> <span class="nb">object</span> <span class="n">at</span> <span class="mf">0</span><span class="n">x833deec</span><span class="o">></span> <span class="o">>>></span> <span class="n">_</span><span class="o">.</span><span class="n">next</span><span class="p">()</span> <span class="mf">1</span> <span class="o">>>></span> <span class="n">ascii</span><span class="p">(</span><span class="s">'한'</span><span class="p">)</span> <span class="c"># 기존의 repr()을 대체하는 ascii()</span> <span class="s">"'</span><span class="se">\\</span><span class="s">xed</span><span class="se">\\</span><span class="s">x95</span><span class="se">\\</span><span class="s">x9c'"</span> |
파이썬 3.0에서 바뀌는 문법 미리 맛보기
파이썬 3.0에서 바뀌는 print나 유니코드 문자열, 바이트 문자열 같은 것들을 모듈 단위로 미리 쓸 수도 있습니다. 마찬가지로 부분 부분 대처를 해서 3.0용으로 부드럽게 넘어갈 수 있겠죠.
유니코드 문자열
1 2 3 4 5 |
<span class="o">>>></span> <span class="p">(</span><span class="s">'산타'</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="s">'산타'</span><span class="p">))</span> <span class="p">(</span><span class="s">'</span><span class="se">\xec\x82\xb0\xed\x83\x80</span><span class="s">'</span><span class="p">,</span> <span class="mf">6</span><span class="p">)</span> <span class="o">>>></span> <span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">unicode_literals</span> <span class="o">>>></span> <span class="s">'산타'</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="s">'산타'</span><span class="p">)</span> <span class="p">(</span><span class="s">u'</span><span class="se">\uc0b0\ud0c0</span><span class="s">'</span><span class="p">,</span> <span class="mf">2</span><span class="p">)</span> |
print 함수
1 2 3 4 5 6 |
<span class="o">>>></span> <span class="n">print</span><span class="p">(</span><span class="s">'한글'</span><span class="p">,</span> <span class="mf">1</span><span class="p">)</span> <span class="p">(</span><span class="s">u'</span><span class="se">\ud55c\uae00</span><span class="s">'</span><span class="p">,</span> <span class="mf">1</span><span class="p">)</span> <span class="o">>>></span> <span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span> <span class="o">>>></span> <span class="n">print</span><span class="p">(</span><span class="s">'한글'</span><span class="p">,</span> <span class="mf">1</span><span class="p">)</span> <span class="err">한글</span> <span class="mf">1</span> <span class="bp">None</span> |
어때요! 한 번 해보고 싶으시죠!
다음에는 파이썬 3.0 호환성과 직접적인 관련은 없는 2.6의 새로운 기능을 소개해 드리겠습니다~