Dylan_Han
IT Blog
Dylan_Han
전체 방문자
오늘
어제
  • 전체 (19)
    • Front-End (8)
      • HTML (8)
    • SW (11)
      • Python 기초 (7)
      • Python 심화 (4)

블로그 메뉴

  • Github
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Dylan_Han

IT Blog

SW/Python 심화

[Fast I/O] sys.stdin.readline() 함수

2023. 9. 24. 16:39

1. sys.stdin.readline() 함수란?

  • sys.stdin.readline() 함수는 sys 모듈에서 제공하는 함수로, 표준 입력 스트림(stdin)에서 한 줄씩 데이터를 읽어오는 역할을 합니다. 이 함수는 주로 파일 입력과 같은 고급 입출력 작업에서 사용되며, 특히 대용량 데이터를 처리할 때 성능적으로 유리합니다.

 


 

2. 주요 특징과 사용방법

  • 여기서 몇 가지 주요 특징과 사용 방법을 설명하겠습니다.

 


 

2-1. 모듈 임포트:

  • sys.stdin.readline() 함수를 사용하기 위해서는 sys 모듈을 먼저 임포트해야 합니다.
import sys

 

2-2. 입력 읽기:

  • sys.stdin.readline() 함수를 호출하면 표준 입력에서 한 줄의 데이터를 읽어옵니다. 이때, 개행 문자(\n)를 포함한 문자열을 반환합니다.
line = sys.stdin.readline()

 

2-3. 입력 끝 검사:

  • sys.stdin.readline()은 사용자 입력이 없을 때(EOF, End of File)에도 블로킹되지 않고 빈 문자열('')을 반환합니다. 따라서 입력의 끝을 검사하려면 반환된 문자열이 비어 있는지 확인해야 합니다.
line = sys.stdin.readline()
if not line:
    # 입력의 끝에 도달했을 때 처리할 코드

 

2-4. 개행 문자 처리:

  • sys.stdin.readline() 함수로 읽어온 문자열에는 개행 문자(\n)가 포함되므로, 필요한 경우 개행 문자를 제거하려면 strip() 메서드나 rstrip() 메서드를 사용합니다.
line = sys.stdin.readline().strip()  # 개행 문자 제거

 


 

3. 성능면에서 더 우수한 이유

  • sys.stdin.readline() 함수가 input() 함수보다 성능면에서 더 우수한 이유는 입출력 버퍼링과 관련이 있습니다. 여기에서 성능 차이의 주요 이유를 설명하겠습니다:

 


 

3-1. 입출력 버퍼링:

  • input(): input() 함수는 사용자가 입력할 때마다 입력 버퍼를 flush하고 키보드 입력을 읽어옵니다. 이는 사용자가 입력할 때마다 입출력 동작이 발생하므로 작은 입력에 대해서는 큰 문제가 되지 않지만, 대용량 입력을 처리할 때는 매우 비효율적입니다.
  • sys.stdin.readline(): sys.stdin.readline() 함수는 파일 스트림을 사용하며, 파일 스트림은 보통 입력을 버퍼링하여 한 번에 여러 문자를 읽어옵니다. 이로 인해 입출력 동작이 더 효율적으로 수행됩니다. 따라서 대용량 입력을 처리할 때 더 빠릅니다.

 

3-2. 문자열 처리:

  • input(): input() 함수는 입력 문자열을 반환할 때 항상 문자열을 생성합니다. 이는 문자열을 반환할 때마다 메모리 할당 및 해제 작업이 발생하므로 반복적인 입력 처리 시 성능에 영향을 줄 수 있습니다.
  • sys.stdin.readline(): sys.stdin.readline() 함수는 문자열을 반환할 때마다 메모리를 새로 할당하지 않습니다. 대신, 입력 데이터를 버퍼에 담아 반환하므로 문자열 생성과 관련된 오버헤드가 적습니다.

 


 

4. 결론

  • 요약하면, sys.stdin.readline() 함수는 버퍼링을 활용하여 대용량 입력 처리 및 입출력 효율성에서 input() 함수보다 성능이 우수합니다. 하지만 일반적인 상호작용형 입력에는 input() 함수가 더 편리하며, 성능 차이가 크게 나타나는 경우는 대량의 입력을 처리해야 할 때나 입출력 성능이 중요한 상황입니다.

 

++ 아래 예제처럼 override하여 좀더 간단히 사용가능하다

import sys
input = sys.stdin.readline

n = input()
    'SW/Python 심화' 카테고리의 다른 글
    • [TIP] 리스트 요소 한번에 출력하기
    • [함수] enumerate()
    • [자료구조] deque (collections 모듈)
    Dylan_Han
    Dylan_Han

    티스토리툴바