언어/파이썬

with는 왜 쓰는 것일까

AlgoPoolJa 2021. 1. 12. 20:52

with 는 정말 여러방면으로 쓰인다. 대표적인 예로는 파일을 입출력 할 때 많이 쓰이는 것을 알 수 있다. 그렇다면 with는 파일입출력만을 위해서 쓰이는 것일까? 그게 아니라면 어떻게 쓰이고 왜 쓰이는 것일까?

 

1. 파일 입출력만을 위해 쓰인다.

=> 아니다. 우선 with를 어떻게 쓰는지 왜 쓰는지 알아야 빠른 이해가 된다. 

 

2. with 는 왜 쓰이는 것일까?

=>

1. 파일을 다룰때 with 블록을 통해 명시적으로  close() 메소드를 호출하지 않고도 파일을 닫을 수 있다.

2 파일을 닫을때는 파일 내부에 __exit__()가 구현되어있기 때문에 with 블록이 종료될때 자동으로 __exit__() 메소드가 호출되어 파일을 close 하게 된다.

3.클래스를 호출할때도 사용된다.(단 2. 에서 말했듯이 클래스 안에 __enter__() 과 __exit__() 이 구현되어있어야 한다). 

4.클래스에 쓰는 경우에는 클래스이름이 모호하거나 다분히 길다고 생각할 때 import numpy as np 처럼 줄일 수 있듯이 with .... as를 사용해서 줄일 수 있다.

5.torch.no_grad() 에서와 같이 backpropagation을 모델의 어떤 부분에서는 하지 않고 싶을 때 사용하기도 한다. 즉 inner_scope 와 outer_scope를 나눌때 사용한다고 생각해도 된다.

 

참고로 __enter__() 은 클래스가 생성되어서 시작할때 실행 되고 __exit__()은 클래스가 종료될때 실행되는 함수이다.