
* 'with' 구문
파이썬 2.5에 시험적으로 도입되었던 with 구문이 정식 기능으로 바뀌었습니다. 파이썬 2.5에서는 'from __future__ import with_statement'를 선언해야 with를 쓸 수 있었는데, 이제 안 그래도 됩니다.
with 구문은 코드 중 일부가 독립되어 움직일 때, 코드를 깔끔하게 만들 수 있는 기능입니다. 다음 예제를 보면 이해가 쉽습니다.
with open('test.txt') as f:
for line in f:
print line
with 블럭에 들어가기 전에 해당 객체의 __enter__()가, 나오고 나서는 __exit__()가 호출됩니다. with 블럭 안에서 예외가 발생해도 무조건 __exit__()는 호출되기 때문에, 코드를 깔끔하게 유지할 수 있습니다. 위 예제에서는 file 객체의 __exit__()가 열린 파일을 닫게 되지요.
* 사용자별 site-packages 디렉터리
파이썬에서 모듈을 설치하면 site-packages라는 폴더에 모듈 파일이 저장됩니다. 이 폴더는 보통 시스템 영역에 있기 때문에 일반 사용자는 접근이 불가능하지요. 그래서 사용자가 직접 자신만의 site-packages 폴더를 만들 수 있도록 개선되었습니다.
리눅스, 맥: ~/.local/
윈도우: Application Data/Python
이 폴더 안에서 각각 lib/python2.6/site-packages 또는 Python26/site-packages 같이 버전을 지정할 수 있습니다.
* 고급 문자열 포맷
파이썬 3.0에서 들여온 기능 중 하나로, str.format() 함수가 추가되었습니다. % 구문만으로는 만족하실 수 없었던 분들에게 제격입니다.
* 함수로서의 print
사랑하는 print가 드디어 함수가 되는군요 ㅠㅠ. 물론 완전히 함수가 된 것은 아니고, 'from __future__ import print_function'를 해야 함수로 바뀝니다. 이것도 파이썬 3.0에서는 완전히 함수로 고정되게 됩니다. 저는 print가 함수가 아닌 문장 구조로서 동작하는 것을 싫어하면서도 좋아했는데, 좀 아쉽군요.
* 예외 처리 변화
파이썬에서 예외 처리를 할 때 사용하는 try-except 구문은 다음과 같이 사용합니다.
try:
...
except TypeError, exc:
print '으악 오류다'
여기서 TypeError뿐만 아니라 ValueError도 잡아내고 싶다면, 이렇게 바뀝니다.
except (TypeError, ValueError), exc:
하지만 뒤에 붙는 'exc'는 안 줘도 되기 때문에, 다음과 같이 쓸 수도 있습니다.
except (TypeError, ValueError):
여기서 헷갈림이 발생하는데, ()를 생략하는 실수가 그것입니다. 즉, 다음과 같이 쓰면 문법 오류가 됩니다.
except TypeError, ValueError:
그래서 파이썬 3.0부터는 다음과 같이 쓰게 됩니다.
except TypeError, ValueError as exc:
이 변화가 파이썬 2.6에도 적용되었습니다. 현재는 두 방식 모두 지원하지만, 파이썬 3.0에서는 except-as만 지원하게 되니까 빨리 익숙해져야겠군요.
* 바이트 상수 (유니코드 지원)
드디어 기다리고 기다리던 바이트 상수가 도입되었습니다! 파이썬 2.6에서 'from __future__ import unicode_literals'를 하면, 기존의 u''가 ''로 바뀌고, 기존의 ''는 b''로 바뀌게 됩니다. 즉, 기본 문자열이 유니코드로 지정됩니다. 아주 마음에 드는 변화입니다. 문자열을 사용할 때마다 일일이 u''를 붙이는 것이 정말 귀찮았거든요.
그래서 glob.glob() 같은 파일 처리 함수도, 유니코드 문자열을 입력으로 주면 유니코드 파일명을 반환하게 되었습니다.
* 클래스 데코레이터
이제 함수 뿐만 아니라 클래스에도 데코레이터가 적용됩니다.
* fraction 모듈
오오, 재미난 모듈이 추가되었습니다. '분수' 모듈입니다. 다음과 같이 쓴다고 합니다.
>>> from fractions import Fraction
>>> a = Fraction(2, 3)
>>> b = Fraction(2, 5)
>>> float(a), float(b)
(0.66666666666666663, 0.40000000000000002)
>>> a+b
Fraction(16, 15)
>>> a/b
Fraction(5, 3)
(...)
>>> (2.5).as_integer_ratio()
(5, 2)
>>> (3.1415).as_integer_ratio()
(7074029114692207L, 2251799813685248L)
컴퓨터는 일반적인 계산기처럼 소수점 계산을 수행하기 때문에, 무한 소수를 계산할 때는 오차가 발생하게 됩니다. 이것을 사람이 직접 분수를 계산하는 것처럼 수행해줍니다.
* json 모듈
우오옷! JSON 모듈까지 기본 지원이 된 겁니까! 기쁩니다. 지금까지는 simplejson을 쓰고 있었는데, 즐거운 마음으로 갈아탈 수 있겠군요.
* 기타 달라진 사항
- asyncore 모듈과 asynchat 모듈이 다시 활발하게 관리되고 있습니다. 이 두 모듈은 랜덤여신이 예전에 즐겨 사용했지만, 버그 투성이인데다가 코드도 깔끔하지 못해서 요즘은 통 안 쓰고 있었는데, 어떤 새로운 모습을 보여줄지 기대됩니다.
- reduce() 함수가 functools 모듈 소속이 되었습니다. 아직은 빌트인에 있지만, 파이썬 3.0부터는 빌트인에서 사라지게 됩니다. 슬픕니다. ㅠㅠ
- md5 모듈이 사용 금지(deprecated)되었습니다. 이제 hashlib을 써야 합니다.
- 윈도우 95, 98, ME, NT4 지원이 중단되었습니다. 이제 파이썬 2.6은 최소한 윈도우 2000 SP4를 요구합니다. 이것은 위에서 언급한 유니코드 지원과 관련이 있을지도 모르겠군요.
귀도 반 로섬(Guido van Rossum)이 1991년에 창시하여 여기까지 온 파이썬에 앞으로도 많은 발전 있기를 바랍니다.
끝으로 지금까지 파이썬이 어떤 식으로 발전했는지를 보여주는 동영상 하나를 소개합니다.
What’s New in Python 2.6
파이썬 3.0a1 발표와 파이썬 3.x에서 달라질 점
Posted by 랜덤여신

