Python

[Python] with 문

s_y_130 2021. 4. 9. 10:49

파이썬의 with...as 구문은 파일 스트림을 다루는데 있어서 파이썬에서 제공하는 강력한 기능 중 하나다. 파일을 다루는 처리를 할때는 필수적으로 파일 오픈(open) 파일 닫기(close) 과정을 거치게 된다. 하지만 코드가 복잡해지면서 개발자는 파일을 열어놓고 닫지 않는 실수를 할 경우가 생기게 된다. with ... as 구문을 사용하게 되면 파일을 열고 해당 구문이 끝나면 자동으로 닫히게 되어서 이러한 실수를 줄일 수 있다. 

 

[문법]

with EXPRESSION [as VARIABLE]:
    BLOCK
cs

 

다음과 같은 코드가 있다면

 

file_data = open('file.txt')
print(file_data.readline(), end="")
file_data.close()
cs

 

아래처럼 바꿀 수 있다.

 

with open('file.txt'as file_data:
    # 기본적으로 사용하는 함수를  with문 안에 사용하면 되며
    # with문을 나올 때 close를 자동으로 불러줍니다.
    print(file_data.readline(), end="")
cs

 

with as 구문은 이처럼 파일 스트림을 손쉽게 다루는 경우에 유용하지만 네트워크 스트림을 다루는 소켓 프로그래밍과 같은 곳에서도 활용할 수 있다.

 

 

[또 다른 예시]

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind(ADDR)      # address binding
    s.listen()      # listen
    while True:
        c_socket, c_addr = s.accept()
        msg = c_socket.recv(SIZE)
        print("from : {}  message : {}".format(c_addr,msg))
        c_socket.sendall("Hello!".encode())
        c_socket.close()
cs