Skip to content

Instantly share code, notes, and snippets.

@shoark7
Last active November 8, 2022 08:39
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shoark7/fa0a66bfc37d63890603a276f974f0b6 to your computer and use it in GitHub Desktop.
Save shoark7/fa0a66bfc37d63890603a276f974f0b6 to your computer and use it in GitHub Desktop.
Python의 print 함수에 대해 좀더 알아봅니다.

먼저 오늘도 고생 많으셨습니다.

오늘 들으신 내용은 거의 모든 언어에서 처음 배우기 마련인 출력에 대한 함수입니다. 파이썬에서는 대표적으로 print를 배우게 되는데요. 이 print라는 함수에 대해 보다 심화된 내용을 소개드리려고 합니다.

먼저 시작에 앞서 다음과 같이 입력해보겠습니다.

help(print)

helpprint와 비슷한 함수로서 입력된 함수나 기능에 대한 사용설명서를 출력합니다. 꼭 파이썬이 아니더라도 제가 강력히 추천드리는 공부 방법은 어떤 언어라도 깊게 이해하고 싶으면 처음 접하게 되는 기능에 대한 설명문서를 읽어보는 것인데요. 설명문서를 읽음으로써 함수의 입출력, 정확히 하는 작업, 추가적인 옵션 등을 파악할 수 있습니다.
앞으로 수많은 내용을 배우실 텐데요. 관련 설명문서를 안 읽는 것보다 조금이라도 읽어보는 것이 무조건 옳다고 단언해드릴 수 있습니다.

위의 코드의 실행결과를 조금만 적어보겠습니다.

Help on built-in function print in module builtins:

print(...)
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
    
    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:

# ... 생략

화면에 print 함수에 대한 설명이 나옵니다. 조금 읽어보시면 함수가 하는 일, 받는 인자 등에 대한 소개가 있습니다. 오늘 영상에서 배우신 sep, end도 있습니다. 아 참고로 인자(argument)란, () 안에 넣는 모든 값을 의미한다고 보시면 됩니다.

설명문서에서 end 인자 뒤에 배우지 않은 file, flush가 있습니다. 실제로 print 함수는 이 인자들도 받을 수 있는데요. 강사님이 이 부분을 설명하지 않은 이유는 이 두 인자가 운영체제와 직간접적으로 관련이 있어 영상의 수준을 벗어나기 때문인 것 같습니다.

print의 심화내용으로서 file, flush 인자에 대해 매우 간략히 설명드리겠습니다.



file=sys.stdout 인자

프로그래밍에는 표준 입출력이라는 개념이 있습니다. 짧게 말씀드리면 프로그램에서 특별한 설정없이 입력과 출력을 받을 때 사용하는 경로라고 할 수 있습니다. print 함수는 출력 방향을 화면으로 향하는 것이 기본값(표준 출력)으로 되어 있어서 기본적으로는 화면에 내용이 출력됩니다.

하지만 file 인자에 다른 내용을 준다면 파일 등에 내용을 쓰는 것도 가능해집니다. stdout은 이때 standard output(표준 출력)의 줄임말이구요.

혹시 표준 입출력에 대한 내용을 좀더 살펴보고 싶은 분들은 제 블로그를 읽어보셔도 괜찮습니다.

https://shoark7.github.io/programming/knowledge/what-is-standard-stream


flush=False 인자:

flush는 정말 하드웨어와 관련이 있는 개념입니다. 정확히는 I/O 버퍼와 관련이 있는데요. 우리가 키보드에서 글자를 입력하면 화면에 바로 내용이 출력됩니다. 하지만 키보드와 화면 사이에는 '버퍼(buffer)' 개념 또는 장치가 있어서 버퍼에서 내용을 출력 전에 잠시 보관하게 됩니다. flush는 키보드에서 입력되어 버퍼에 저장된 내용을 출력방향(여기서는 화면)으로 바로 밀어넣는다는 의미인데 이 밀어넣는 것은 성능면에서 비용이 크다고 합니다. 그 말은 밀어넣는 작업을 적게 할수록 비용효율적이라는 뜻과 같아집니다. 그래서 이 인자를 곧 배우실 False로 해놓으면 경우에 따라서는 비용절감을 위해 입력된 내용이 바로 화면에 출력되지 않을 수도 있습니다. 이 부분은 정말 하드웨어와 관련이 있어서 일단 읽고 넘어가셔도 충분할 것 같습니다.

위 두 인자는 좀 마니악해서 저도 거의 안 써본 것 같습니다. 그렇기에 혹시 당장 이해가 안 가시더라도 그냥 넘어가셔도 아무런 지장이 없습니다. 필요하시면 두 내용은 따로 질문주시면 더 자세하게 말씀드릴 수 있도록 하겠습니다.



설명이 길어졌는데요. 제가 강조드리고 싶은 것은 print의 모든 인자를 파악하는 것이 중요하다기보다도 모르는 기능이나 자료구조가 나오면 반드시 help(something)을 써서 설명문서를 읽어보라는 것입니다.

오늘 고생하셨고 내일 뵐게요!!

@peter-Sohn
Copy link

flush 인자가 어떤 역할을 하는지 궁금했는데 덕분에 해결이 됐네요
좋은 글 감사합니다

@hanvv3
Copy link

hanvv3 commented Oct 2, 2021

정말 좋은글 감사합니다!

@KwangryeolPark
Copy link

KwangryeolPark commented Nov 8, 2022

flush의 하드웨어적인 측면을 조금 더 설명하자면, 일반적으로 데이터를 전송할 때 작은 단위로 여러번 보내는 것보다는 특정 단위로 여러 번 보내는 것효율적입니다. 예를들어 컴퓨터 하드디스크에 데이터를 저장할 때는 4Kbytes 단위마다 데이터를 저장하는 것이 효율적인 것으로 알려져 있죠. print로 마찬가지로 모니터에 데이터를 전송하는 함수이며, 이때도 가장 효율이 좋은 특정 단위가 존재하기 마련입니다. 그래서 우리는 buffer라는 곳에 임시로 저장했다가, 그 특정 단위마다 그리고 \n 문자가 buffer 저장되면 그제서야 buffer에서 모니터로 데이터를 전송하는 것이죠. 효율을 위해서요.

본문과 제가 설명한 개념은 꼭 python 뿐만 아니라 C 언어에서도 적용되는 개념입니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment