[컴][파이썬] 파이썬의 with statement

with 명령어

python 에 with 라는 statement 가 생겼다.
물론 아주 오래전에, python 2.5에서 생겼는데, 2.6 부터 완전히 들어간 듯 하다.
참고로 v.2.5 에서 with 를 사용하려면 아래 부분을 넣어줘야 한다.
from __future__ import with_statement
with 는 __enter__ 를 실행시키고, 어떤 에러가 나더라도 __exit__() 를 반드시 실행시켜주는 역할을 한다.

try / finally 의 구문을 대체하기 위한 용도로 만들어졌다고 한다.(자세한 내용은 ref.1 을 참고하자.)

file open 과 관련해서 설명하자면, 아래의 코드에서 f은 항상 close() 가 호출 되어야 한다.
f = open("./text.txt")
try:
    data = f.read()
finally:
    f.close()
이런 경우에 우리는 try / finally 구문을 많이 썼는데, 이런 것을 계속 사용하는 것이 귀찮아서(?) 만든 것이 with 라고 할 수 있겠다.

이 with 라는 녀석은 try, finally 를 써야 할 녀석 중에 __enter__() 와 __exit__() 가 갖춰진 object 와 관련하여 사용할 수 있는 듯 하다.

좀 더 자세한 설명은 ref. 1을 참고하자.

file object 에서 사용할 수 있도록 Python 2.5 에서 file object 는 __enter__ 와 __exit__ 함수(method) 가 더해졌다.
__enter__ 에서는 file object 를 return 해 주고, __exit__ 에서는 file 을 닫아준다.(close())
f.__enter__()
같은 방법으로 object 가 __enter__ 또는 __exit__ 를 가지고 있는 지 test 를 해 볼 수 있다.


with 사용법

이제 with 를 사용 해 보자. 위의 file 관련 소스가 아래와 같이 바뀐다.
with open("x.txt") as f:
    data = f.read()
f.close() 부분이 빠져서 혼란스러울 수도 있지만, close() 가 확실히 호출되기 때문에 익숙해 지면, 가독성도 좋고, 편리하기도 할 듯 하다.

여하튼 설명이 엄청 미숙하다. ^^;; 그러니, 꼭 reference 를 찾아가서 읽어보길 바란다.


Reference

  1. Understanding Python's "with” statement
    http://effbot.org/zone/python-with-statement.htm

댓글 없음:

댓글 쓰기