본문 바로가기
Programming/Python

[Python] input()과 sys.stdin.readline()의 차이

by @__100.s 2021. 8. 17.
반응형

버퍼(buffer)

  • 표준 입출력 함수를 사용할 때에는 버퍼(buffer)라는 임시 메모리 공간을 사용하게 된다.


input()

  • input()은 사용자로부터 한 줄을 입력 받은 뒤 입력된 줄(line)을 문자열로 변환하여 처리한다. 이때 입력 마지막의 줄바꿈(\n)은 포함하지 않는다.
  • 사용자가 키를 하나씩 누르면 이에 대응하는 데이터가 버퍼에 보관된다. 개행문자(\n)가 입력되면 버퍼의 입력이 종료된 것으로 간주한다.
  • input() 호출 시 Prompt 문자열을 화면에 출력해 사용자의 입력을 기다린다. 대량의 입력을 받는 경우 입력을 받고 다시 prompt 창을 띄우고의 과정을 반복하므로 오류 발생 가능성이 증가한다.
  • 더 이상 받을 입력이 없을 때 수행될 경우 EOF(End of File) error를 일으킨다.

    * EOF(End of file)이란?

      파일의 끝을 의미하며 데이터 소스로부터 더 이상 읽을 수 있는 데이터가 없음을 나타낸다.

sys.stdin.readline()

  • sys.stdin.readline()은 개행 문자를 포함한 사용자의 입력을 문자열로 변환하여 처리한다.
  • 입력 크기에 제한을 줌으로써 한번에 읽어들일 문자의 수를 정할 수 있다.
  • 내장함수인 input()과 달리 sys.stdin은 file object 이다. 사용자의 입력만을 받는 buffer를 만들어 그 buffer에서 읽어들인다.
  • sys.stdin.readline()은 입력이 종료되면 데이터를 한번에 읽어와 버퍼에 보관하므로 input() 보다 처리속도가 빠르다.
  • stdin(standard input))에서 알 수 있듯이 input()보다는 low level에서 입력을 처리한다. 그렇기에 입력을 받을 때 input()보다는 sys.stdin.readline()의 처리 속도가 훨씬 빠르다.
  • 단, sys.stdin.readline() 입력의 마지막에 줄바꿈(/n)을 제거하기 위해 strip()하는 경우에는(sys.stdin.readline().strip()) , input()을 사용하는 것보다 처리속도가 느리다.
  • 더 이상 받을 입력이 없을 때 수행될 경우 빈 문자열을 반환한다.

참조

반응형

'Programming > Python' 카테고리의 다른 글

[Python] 파이썬 collections.deque 모듈 사용하기  (0) 2021.08.18
[Python] Heapq 모듈 사용하기  (0) 2021.08.17