language/Python

[Python] Input() vs sys.stdin.readline() 입력 함수 차이 (feat. python version)

스파이디웹 2022. 12. 15. 15:42
728x90

이번 포스트에는 사용자 입력을 처리하기 위한 내장 함수에 대해서 비교하여 정리하겠습니다.

 

1. Python 2.x

1) raw_input()

입력 값을 무조건 문자열로 받음

2) input()

입력으로 들어온 값을 evaluate 해서 그 값에 맞는 자료형으로 초기화(형변환이 자동으로 된다.)


2. Python 3.x

1) input()

  • Python 3.x에서 input()는 Python 2.x 의 raw_input() 역할을 대신하여 입력 값을 문자열로 받음
    -> 다른 타입을 넘겨주기 위해선 형변환이 필요
  • Python 3.x로 넘어오면서 모든 변수가 객체(object)로 처리됨에 따라서 결과 값도 type에서 class로 바뀌게 됨
  • input() 내장 함수는 parameter로 prompt message를 받을 수 있음
    -> 입력받기 전 prompt message를 출력 (느린속도, 부하의 원인)
# 입력하세요: 라는 prompt 메세지를 받는 input()
a =input("입력하세요: ")
print(a)


  • input() 내장 함수는 입력받은 값의 개행 문자를 삭제시켜서 리턴
    -> 입력받은 문자열에 rstrip() 함수를 적용시켜서 리턴, 정확히는 개행문자만 없애서 줄바꿈없이 출력 (느린속도, 부하의 원인)
  • input()은 더 이상 입력이 없는데도 수행될 경우 EOFerror에러 출력
  • 내장 함수

2) sys.stdin.readline()

  • sys.stdin.readline()는 입력값을 문자열로 받음
    -> 다른 타입을 넘겨주기 위해선 형변환이 필요
  • sys.stdin.readline()은 prompt message를 인수로 받지 않음
# 잘못된 예
b = sys.stdin.readline("입력하세요: ") # 에러 출력

# 올바른 예
b = sys.stdin.readline
print("입력하세요:",b())


  • 한줄 단위로 입력받기 때문에, 개행 문자를 포함한 값을 리턴
    -> 줄바꿈(new line)이 적용되고 다음줄부터 출력
    -> rstrip()을 붙여줘야 개행을 제거한 채로 출력
# rstrip()하여 출력
b = sys.stdin.readline
print("입력하세요:",b().rstrip())
print("new line test")

# rstrip()없이 입력
b = sys.stdin.readline
print("입력하세요:",b())
print("new line test")


  • sys.stdin.readline()은 빈 문자열을 반환
  • sys 에 속하는 메소드들은 file object로 취급, 사용자의 입력만을 받는 buffer를 하나 만들어 그 buffer에서 읽어들이는 것

3) input() vs sys.stdin.readline 비교표

version : python 3.x input() sys.stdin.readline
받는 형태 문자열(다른 타입을 넘겨주기 위해선 형변환 필요)
반환 형태 모든 변수가 객체(object)로 처리됨에 따라 class 반환
promt message 사용여부 사용 가능(속도 저하) 사용 불가능
개행 포함여부 개행 불포함(개행 제거후 출력 → 속도저하) 개행 포함(개행 적용 후 출력 개행 제거를 위해서는 rstrip()이 필요)
빈문자 입력 EOFerror에러 출력 빈 문자열 반환
함수 형태 내장 함수 sys에 속하는 메소드로 file object 취급,
사용자의 입력만을 받는 buffer를 만들어서 읽어들임

 

 

참조:

https://buyandpray.tistory.com/7

https://velog.io/@gouz7514/%ED%8C%8C%EC%9D%B4%EC%8D%AC-input-vs-sys.stdin.readline

728x90