카테고리 없음

[Python] input보다 sys.stdin.readline의 처리 속도가 빠른 이유는?

푸른잎 뱅갈고무나무 2021. 4. 15. 12:47

백준의 문제를 Python으로 풀다보면 input() 함수를 사용하는 것보다 sys.stdin.readline()으로 입력을 받으면 처리 시간이 짧아지는 것을 경험하는데요. 그 이유에 대해 생각해보고자 합니다.

 

먼저 sys 모듈는 무엇일까요?

 

일단 공식 문서에서의 설명은 아래와 같습니다.

"이 모듈은 인터프리터에 의해 사용되거나 유지되는 일부 변수와 인터프리터와 강하게 상호 작용하는 함수에 대한 액세스를 제공합니다 "

 

다시 점프 투 파이썬에서는 "sys 모듈은 파이썬 인터프리터가 제공하는 변수와 함수를 직접 제어할 수 있게 해주는 모듈이다." 라고 정의하고 있습니다.

 

sys 모듈은 강제로 스크립트를 종료할 수도 있고 파이썬 모듈들이 저장된 위치등을 알 수도 있는 등 시스템을 제어할 수 있는 모듈로 생각됩니다.

 

sys 모듈에서 stdin 그리고 readline()은 무엇일까요?

 

공식 문서에서 stdin은 "stdin는 모든 대화식 입력에 사용됩니다 (input() 호출을 포함합니다)"

 

sys.stdinsys.stdoutsys.stderr

File objects used by the interpreter for standard input, output and errors:

  • stdin is used for all interactive input (including calls to input());
  • stdout is used for the output of print() and expression statements and for the prompts of input();
  • The interpreter’s own prompts and its error messages go to stderr.

 

stdin은 모든 대화식 입력에 사용된다는 의미는 우리가 흔히 키보드로 입력하는 행위 뿐만 아니라 파일 등의 넓은 범위의 입력을 의미한다. 그리고 주목해야 할 점은 stdin에 input() 호출을 포함하고 있단 사실이다.

 

input()의 입력 저장 순서

 

1. input이 호출되면 인자로 주어진 Prompt 문자열을 화면에 출력하고 사용자의 입력을 기다린다

2. 이 때 표준 입력은 키보드다

3. 사용자가 키를 하나씩 누르면 이에 대응하는 데이터가 버퍼에 들어간다

4. enter키를 누르면 개행문자(줄바꿈,, \n)이 입력되며, 버퍼의 입력이 종료된 것으로 간주

5. 입력된 문자열은 해당 시스템의 콘솔 입출력 인코딩을 사용하여 디코드되어 유니코드 문자열로 변환된다.

6. input() 함수는 변환된 문자열 값을 반환하면서 종료한다

 

stdin.readline()과 input()함수간의 속도차이

 

1) 두 함수간의 속도차이는 Prompt 출력여부와

2) 한번에 읽어와 버퍼에  저장하는 stdin.readline()가 하나씩 누를 때마다 데이터를 버퍼에 보관하는 input() 보다 처리 속도가 빠르다. 즉, 버퍼 사이즈 차이로 입력이 반복될 수록 stdin.readline()이 우위를 가진다.

 



출처: https://countingalaxy.tistory.com/entry/데이터의-입력과-출력 [countingalaxy]

 

 

 

참고 :

데이터의 입력과 출력 : countingalaxy.tistory.com/entry/%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%9D%98-%EC%9E%85%EB%A0%A5%EA%B3%BC-%EC%B6%9C%EB%A0%A5

 

데이터의 입력과 출력

이번 일요일에 코딩 테스트가 있다. 그런데 사용 가능 언어에 Python이 없어서 Java를 리마인드해볼 겸 생활코딩의 강의를 듣고 있다가 문득 궁금해졌다. 데이터의 입력과 출력은 어떻게 이루어지

countingalaxy.tistory.com