-
with는 왜 쓰는 것일까언어/파이썬 2021. 1. 12. 20:52This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
from tqdm import tqdm #case1 with open("file_path", "w") as f: read_data = f.read() print(f.closed) # True #case2 with tqdm(total = len(data_loader) as pbar: """ DO SOMETHING """ #case3 with torch.no_grad(): """ 무언가를 한다 """ 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__()은 클래스가 종료될때 실행되는 함수이다.
'언어 > 파이썬' 카테고리의 다른 글
== 와 is 의 차이 (0) 2021.01.13 list 에서의 append 와 extend (0) 2021.01.12 최댓값과 최솟값 (1) 2021.01.12 파이썬 내장함수들 (0) 2021.01.11 정적메소드와 클래스메소드 (0) 2021.01.09