[Python] print(), help(), dir(), Python Docs

지기성·2022년 4월 3일
0
post-thumbnail

print("Hello world!")

"코딩을 처음 접하면 배우게 되는 그 것"

>>> print("Hello world!")
Hello world!

자세히 들어가보기 위해 help 함수를 써보도록 합시다.

help()

help 함수는 괄호 안에 입력된 함수의 주소값(print를 쓸때 소괄호를 같이 쓰지 않았습니다)나 기능에 대한 "사용설명서"를 출력합니다.

괄호 안에 print 함수를 입력해 보겠습니다.

>>> help(print)

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:
    file:  a file-like object (stream); defaults to the current sys.stdout.
    sep:   string inserted between values, default a space.
    end:   string appended after the last value, default a newline.
    flush: whether to forcibly flush the stream.

글자 넣으면 출력하는 줄만 알앗는데...


	help(print)에 관한 내용은 
	GUI 환경이라면 함수에 cursor를 올려두면 쉽게 확인 할 수 있습니다    

PyCharm
경계선을 기준으로
위: builtins.py에 쓰여 있는 print 함수의 정의
아래: help(print) 와 동일

*values: object는 값으로 쓸수 있는 것으로, 숫자, 문자열, list 등 모든 자료형이 올 수 있다고 가볍게 이해하시고 넘어가시면 되겠습니다

OOP 에 관한 개념 (class와 instance) 링크
파이썬은 모든 것이 객체(object)이다 <- 링크

 GUI 환경에서 실제 함수가 정의 된 코드를 보기 위해서는
- Mac에서는 command 키 
- Windows에서는 ctrl 키
해당 키를 누르고 있으면 함수의 하이퍼링크가 활성화 되는데, 클릭하면 함수가 정의된 파일에서 해당 함수의 정의를 보여줍니다.

PyCharm
(command키를 누르고 캡쳐를 하고싶은데 안돼네요)
직접 해보시면 이해가 가실겁니다 command키를 누르고 클릭하니 print 함수가 정의된 파일로 이동했습니다
어떻게 온건지 궁금하지 않으신가요?

다른 파일에 쓰여있는 내용을 가져다 쓸 수 있는 개념이 import 입니다
import 링크

self 인자도 보이는데 class 블로그를 참조해 주세요
class 링크




print()

너... 간단한 줄 알았는데 아니였구나?

help함수를 통해 얻은 print 사용설명서를 분석해보겠습니다

print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

인자(argument)

인자(기본값, 지정, 가변), 매개변수 링크
본 블로그에서는 인자는
print함수를 실행할때, 소괄호 안에 넣어주어야 하는 것 정도로 이해하시면 됩니다.

인자(argument)를 살펴보면
인자로 value, sep, end, file, flush 가 보이네요.

1. value

	Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:

설명을 읽어보면 괄호에 넣은 값"들"을 출력한다고 합니다


실제 print의 정의 부분으로 가본다면 다음과 같습니다.

def print(self, *args, sep=' ', end='\n', file=None):

즉, 설명서에 쓰여있는 value부분은 *args 부분이며 값을 여러개 받을 수 있다는 뜻입니다.

>>> print("Hello world!", "Hello world!")                
Hello world! Hello world!



2. sep

	 sep:   string inserted between values, default a space.

sep=' '
기본값(default value)으로 공백 문자 한 개를 문자열로 할당(assignment)되어있네요.


할당에 대해서는 간단하게 대입의 의미로 해석하시면 됩니다
할당 링크


공백 문자 대신 go를 할당해보도록 하겠습니다.

>>> print("Hello world!", "Hello world!", sep='go')     
Hello world!goHello world!

Hello world! 사이에 공백 문자 한 개가 아닌 go가 출력되었습니다

3. end

    end:   string appended after the last value, default a newline.

end='\n'
기본 값으로 개행문자가 할당되어있네요.

개행문자 대신 bye를 할당해보도록 하겠습니다

>>> print("Hello world!", "Hello world!", sep='go', end='bye')    
Hello world!goHello world!bye>>> 

Hello world!goHello world! 끝에 bye가 붙어서 출력되었습니다

또한 원래라면 다음 행에서 입력콘솔이 나타나지만 그 마저도 붙어서 표시됩니다

4. file

    file:  a file-like object (stream); defaults to the current sys.stdout.

file=sys.stdout
기본 값으로 sys.stdout으로 할당되어 있네요

나눠본다면 다음과 같습니다.

  • sys
  • .(Dot)
  • stdout: standard out

직역하자면 sys.py 파일 속의 stdout 변수(variable)가 할당되어있다는 의미입니다.

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

5. flush

	flush: whether to forcibly flush the stream.

flush=False
기본 값으로 False가 할당되어있네요

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


help()와 dir(), 그리고 공식문서(python docs)

프로그래밍 언어를 스스로 학습 하는 방법으로,
help 함수와 dir 함수를 자주 써보실 것을 권합니다. (dir는 directory의 약자)

  • help()
  • dir()

dir 함수에 print 주소값(잘 보시면 소괄호가 없습니다) 을 입력해보겠습니다.

>>> dir(print)
['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__text_signature__']

dir 함수는 내부에 할당되어있는 변수명들을 출력합니다. (ex. 메소드(method), 속성(attribute))

help 함수과 dir 함수로 궁금한 기능이나 자료구조(data structure)를 들여다 본다면
이름하야 "꼬리에 꼬리를 무는 공부"(꼬꼬공 ^^)가 될 것입니다.

공식 문서에서 검색하는 방법도 좋은 방법입니다

https://docs.python.org/3/library/functions.html#print

모든 기능이나 자료구조를 들여다보고 외울 필요는 없지만,
모르는 형태를 검색하다보면, python에 대한 이해의 폭이 넓어질 것 입니다.
Python이 쉽다고 하지만 "잘" 이해하려면 고생 좀 해야합니다


cf. help(print()) ?

help() 함수 안에 print() 가 아닌 print를 넣었습니다

help(print()), dir(print())는 어떤 결과가 나올지 궁금하지 않으신가요?

함수의 소괄호 유무에 관해서는
python에서 함수는 first-class citizen 라는 속성 때문입니다
first-class citizen 링크


  • 링크 모아보기
  1. OOP 에 관한 개념 (class와 instance) 링크
  2. 파이썬은 모든 것이 객체(object)이다 <- 링크
  3. 인자(기본값, 지정, 가변), 매개변수 링크
  4. import 링크
  5. class 링크
  6. 할당 링크
  7. first-class citizen 링크
profile
궁금증 주도 공부 / 원리 파고들기 / 경험에 기반한 블로그

0개의 댓글