일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Open API
- CleanCode
- Spring Boot
- 크레인 인형뽑기 게임
- 불량 사용자
- 호텔 방 배정
- Python
- Tistory
- pycon
- 트라이 #trie #알고리즘
- 튜플
- 보행자 천국
- bulk update
- 프로그래머스
- 티스토리
- 가사 검색
- 카카오 인턴
- 징검다리 건너기
- 티스토리 open api
- jdbc
- trie
- 알고리즘
- 트라이
- Today
- Total
택시짱의 개발 노트
python Context manager 본문
context manager
컨텍스트 매니저는 원하는 타이밍에 정확하게 리소스를 할당하고 제공하는 역할을 합니다. 가장 많이 사용되는 컨텍스트 매니저는with문입니다. 코드 블록 사이에서 한 쌍으로 함께 실행되어야 하는 연결된 수행 코드 2개를 가지고 있다고 생각 해보세요. 컨텍스트 매니저는 정확히 이런 것들을 가능하게 합니다. 예를 들면,
with open('hello.txt', 'w') as opened_file:
opened_file.write('hello world')
위 코드는 파일을 열고 어떤 데이터들을 쓰고 닫는 코드입니다. 만약 데이터를 쓰는 동안 에러가 발생한다면, 파일을 닫으려고 시도할 것입니다. 위의 코드를 try, finally를 이용하여 만들어보면
file = open('hello.txt', 'w')
try:
file.write('hello world')
finally:
file.close()
첫 번째 예시와 두 번째 예시를 비교해보면 with를 이용하여 간단하게 코드를 작성할 수 있습니다. with 문을 이용한 큰 장점은 감싸진 블록에게 신경을 쓰지 않아도 파일은 확실히 close가 된다는것 입니다.
그래서 일반적으로 파일을 open, close할때는 context manager를 사용합니다.
Class로 context manager 향상시키기.
최소한 context manager는 __enter__
과 __exit
메소드를 가지고 있습니다. 파일을 여는 context manager를 만들어보면서 살펴봅시다.
class File(object):
def __init__(self, file_name, method):
self.file_obj = open(file_name, method)
def __enter__(self):
return self.file_obj
def __exit__(self, exc_type, exc_val, exc_tb):
self.file_obj.close()
방금 정의한 __entet__
문과 __exit
문을 with문으로 사용할 수 있습니다.
with File('hello.txt', 'w') as opened_file:
opened_file.write('hello world')
__exit__
함수는 세 가지 전달 인자를 받습니다. 컨텍스트 매니저 class의 일부인 모든 __exit__
메소드에 필요합니다.
__enter__
는 with
문에 진입하는 시점에 자동으로 호출됩니다.
__exit__
는 with
문이 끝나기 직전에 자동으로 호출됩니다.
__exit__
메소드가 받는 세 개의 인자는 해당 객체와 연관된 context내에서 예외가 발생되었을 때, 해당 예외에 관한 정보이다. 만약에 예외 없이 with
구문이 종료가 되었다면 이 세 인자는 모두 None이 될 것이다.
reference link [https://ddanggle.gitbooks.io/interpy-kr/ch24-context-manager.html]
'python' 카테고리의 다른 글
python heapq 모듈 (0) | 2020.09.08 |
---|---|
python 입력 받기 (0) | 2020.08.31 |
ubuntu에서 git bash 설치하기 (0) | 2020.07.15 |
ubuntu에서 pycharm 설치 및 실행 (0) | 2020.07.15 |
python 끄적끄적 (0) | 2020.04.28 |