본문으로 바로가기
Lab

파이썬(Python) 주석 처리 방법, 한 줄·여러 줄·독스트링 직접 해 보니

파이썬 주석을 #, 삼중따옴표, docstring으로 나눠 맥에서 한 번씩 실행해 봤습니다. #은 무시됐고 삼중따옴표는 문자열로 남았습니다. 파이썬 3.15.0에서 여러 줄 주석을 쓰는 법과 Claude Code에게 docstring을 맡긴 결과(7.0초)를 담았습니다.

·

코드 줄 가운데 표시된 줄은 떨어져 나가고, 따옴표 덩어리는 문자열 상자로 남고, 함수 상자 위에는 설명 꼬리표가 붙은 개념 그림
파이썬(Python) 주석 처리 방법, 한 줄·여러 줄·독스트링 직접 해 보니 표지 삽화

맥 한 대에서 파이썬 3.15.0으로 주석 예제를 한 번씩 실행해 봤습니다. #로 시작한 줄은 출력에 아무것도 남기지 않았고, 삼중따옴표로 감싼 글은 str 값으로 그대로 남았습니다. 함수 첫 줄에 둔 문자열은 __doc__과 help()로 다시 읽을 수 있었죠. 파이썬 주석을 #으로 쓸지 삼중따옴표로 쓸지 헷갈렸다면 아래 코드와 출력을 그대로 따라 해 보세요. Claude Code에게 docstring을 달게 한 마지막 단계도 7.0초 만에 종료 코드 0으로 끝났습니다.

따라 할 순서 한눈에 보기

  1. python3 --version으로 쓰는 파이썬 버전을 확인합니다.
  2. 줄 맨 앞과 줄 끝에 #을 붙여 한 줄 주석을 달고, 코드 앞에 #을 붙여 그 줄을 끕니다.
  3. 여러 줄을 설명할 때는 줄마다 #을 붙입니다.
  4. 삼중따옴표(""")로 감싼 글이 주석이 아니라 문자열이라는 점을 확인합니다.
  5. 함수 첫 줄에 docstring을 쓰고 __doc__과 help()로 읽어 봅니다.
  6. 문자열 안의 #은 주석이 아니라는 점을 확인합니다.
  7. Claude Code에게 docstring을 달게 한 뒤 실행해서 읽어 봅니다.

이 실행에서 일곱 단계 모두 종료 코드 0으로 끝났고, 오류가 난 단계는 없었습니다. 그럼 단계마다 실제 코드와 출력을 보겠습니다.

함께 읽을 글

먼저 파이썬 버전 확인하기

예제는 이 컴퓨터에 Homebrew로 설치돼 있던 python3로 돌렸습니다. 코드는 단계마다 python3 - <<'PY' ... PY 형태로 표준 입력에 넣어 바로 실행했어요.

$ python3 --version
Python 3.15.0

한 줄 주석과 코드 끄기

가장 기본은 #입니다. 줄 맨 앞에 쓰면 그 줄 전체가, 코드 뒤에 쓰면 그 자리부터 줄 끝까지가 주석이 됩니다. 실행 중인 코드를 잠깐 끄고 싶을 때도 맨 앞에 #만 붙이면 되죠.

$ python3 - <<'PY'
# 이 줄은 실행되지 않는다
print("첫 줄")  # 줄 끝 주석
# print("주석 처리한 코드")
print("셋째 줄")
PY
첫 줄
셋째 줄

출력에는 "첫 줄"과 "셋째 줄"만 남았습니다. Python 공식 문서의 어휘 분석에 따르면 주석은 문자열 리터럴에 들어 있지 않은 #로 시작해 물리적인 줄 끝에서 끝나고, 문법은 주석을 무시합니다. 그래서 #이 붙은 print는 아예 실행되지 않았어요.

파이썬 여러줄 주석은 어떻게 쓰나요?

파이썬에는 여러 줄을 한 번에 감싸는 주석 기호가 따로 없습니다. 그래서 줄마다 #을 붙이는 방식을 씁니다.

$ python3 - <<'PY'
# 여러 줄을 설명할 때는
# 줄마다 #을 붙인다
total = 1 + 2
print(total)
PY
3

그런데 삼중따옴표로 여러 줄을 감싸도 실행은 되잖아요? 겉보기엔 주석 같지만, 실제로 파이썬이 어떻게 받아들이는지 확인해 보면 이렇습니다.

$ python3 - <<'PY'
"""
이 부분은 주석처럼 보이지만 문자열이다
"""
note = """여러 줄
문자열"""
print(type(note).__name__, repr(note))
PY
str '여러 줄\n문자열'

note의 타입은 str이었고, 줄바꿈도 \n으로 그대로 남았습니다. 공식 문서도 삼중따옴표 문자열은 줄바꿈을 허용하고 그대로 보존한다고 설명해요. 이 실행에서 직접 확인한 건 변수에 담은 쪽이지만, 맨 위에 떠 있는 삼중따옴표 덩어리도 문법상 문자열 리터럴입니다. 게다가 PEP 257에 따르면 모듈의 첫 문장으로 나온 문자열은 그 모듈의 docstring이 됩니다. 순수하게 설명만 남기려면 #을 쓰는 쪽이 의도에 맞습니다.

함수 첫 줄 설명은 어떻게 읽나요?

삼중따옴표가 제 역할을 하는 자리는 함수·클래스·모듈의 첫 문장입니다. PEP 257은 이 자리의 문자열을 docstring이라 부르고, 그 객체의 __doc__ 속성이 된다고 정의합니다.

$ python3 - <<'PY'
def add(a, b):
    """두 수를 더해 돌려준다."""
    return a + b
print(add.__doc__)
help(add)
PY
두 수를 더해 돌려준다.
Help on function add in module __main__:

add(a, b)
    두 수를 더해 돌려준다.

__doc__은 문자열을 그대로 돌려줬고, help()는 함수 이름·인자와 함께 같은 설명을 보여 줬습니다. PEP 257은 한 줄 docstring도 나중에 늘리기 쉽도록 삼중 큰따옴표를 쓰고, 닫는 따옴표를 같은 줄에 두며, 마침표로 끝나는 문장으로 쓰라고 권합니다. 반대로 다른 자리에 둔 문자열은 __doc__에 담기지 않는다고 하니, 위치가 핵심이에요.

파이썬 주석과 docstring 비교 순서를 단계별로 그린 도식
이번 실행에서 #은 아예 빠졌고, 변수에 담은 삼중따옴표 값은 str이었으며, 함수 첫 줄의 문자열은 __doc__으로 읽혔습니다. 도식의 삼중따옴표 칸은 삼중따옴표가 문자열 문법이라는 뜻입니다. 문자열을 실제로 만든 뒤 버리는지는 이번 실험으로 확인하지 않았습니다. 예제 맨 위의 문자열은 모듈의 첫 문장이므로 모듈 docstring입니다.
도식출처: 직접 실행한 순서

문자열 안의 #은 왜 주석이 아닐까요?

URL이나 색상 코드처럼 #이 들어간 값을 다룰 때가 많죠. 이럴 때는 따옴표 안의 #이 주석으로 처리될지 걱정될 수 있습니다.

$ python3 - <<'PY'
url = "https://example.com/#section"
print(url)  # 문자열 안의 #은 주석이 아니다
PY
https://example.com/#section

URL은 #section까지 온전히 출력됐습니다. 앞에서 본 정의대로 주석은 문자열 리터럴에 들어 있지 않은 #부터 시작하기 때문입니다. 같은 줄 뒤쪽, 따옴표 밖에 있는 #만 주석이 됐어요.

줄 맨 앞, 코드 뒤, 코드 앞, 따옴표 안에 놓인 #이 각각 주석인지 문자열 일부인지와 이번 실행의 출력을 비교한 표
따옴표 밖의 #만 주석이 됐고, 따옴표 안의 #은 값에 그대로 남았습니다.
도식출처: 근거를 바탕으로 코드가 그린 도식

AI에게 docstring을 맡기면 어떻게 나올까요?

Claude Code로 함수를 만들고 있다면 설명까지 맡기고 싶을 겁니다. 마지막 단계에서는 이미 로그인된 Claude Code에 --model opus로 요청하고, 결과를 파일로 저장해 바로 실행했습니다.

$ claude --model opus -p "파이썬 함수 def area(w, h): return w * h 에 한국어 docstring을 달고, 그 아래에 print(area.__doc__)를 넣은 코드만 출력해. 설명이나 코드 블록 표시는 붙이지 마." > area.py && cat area.py && python3 area.py
def area(w, h):
    """직사각형의 넓이를 계산하여 반환한다.

    Args:
        w: 가로 길이
        h: 세로 길이

    Returns:
        가로와 세로를 곱한 넓이
    """
    return w * h


print(area.__doc__)
직사각형의 넓이를 계산하여 반환한다.

Args:
    w: 가로 길이
    h: 세로 길이

Returns:
    가로와 세로를 곱한 넓이

위 코드는 이번 한 번의 실행에서 나온 결과이고, 같은 요청이라도 실행할 때마다 내용과 형식이 달라질 수 있습니다. 이번 결과는 PEP 257이 말하는 여러 줄 docstring 짜임(요약 한 줄, 빈 줄, 자세한 설명)을 따랐고, 닫는 따옴표도 따로 한 줄에 뒀습니다. 그래서 요청에 print(area.__doc__)까지 넣어 두면, AI가 쓴 설명이 정말 docstring 자리에 들어갔는지 실행 한 번으로 확인할 수 있어요.

로봇 팔이 함수 상자 맨 위에 설명 꼬리표를 붙이고, 돋보기가 그 꼬리표를 읽는 개념 그림
함수 첫 줄에 붙은 설명이 나중에 다시 읽히는 관계를 그린 개념 그림입니다.

자주 하는 실수와 점검 목록

여기까지의 실행과 공식 문서를 바탕으로, 혼자 코드를 쌓아 갈 때 걸리기 쉬운 지점을 모았습니다.

  • 삼중따옴표를 주석으로 믿기: 문자열입니다. 함수나 모듈의 첫 문장 자리에 오면 docstring이 됩니다.
  • docstring을 함수 중간에 두기: PEP 257에 따르면 첫 문장이 아닌 문자열은 __doc__에 담기지 않습니다.
  • 역슬래시 줄에 주석 달기: 공식 문서는 역슬래시로 끝나는 줄에는 주석을 넣을 수 없다고 합니다. 괄호로 묶어 이어지는 줄에는 주석을 달 수 있습니다.
  • 문자열 속 #을 지우기: 따옴표 안의 #은 값의 일부라서 지우면 값이 바뀝니다.

AI가 고친 코드를 받았다면 아래 항목을 점검해 보세요.

  • 꺼 둔 코드 앞에 #이 제대로 붙어 있는지
  • 설명용 여러 줄이 #으로 되어 있는지
  • 함수 설명이 함수 첫 줄에 삼중 큰따옴표로 들어갔는지
  • help(함수이름)으로 설명이 읽히는지

측정 조건과 한계

모든 단계는 2026-10-27 15:28 KST에 새 임시 폴더 하나에서 적힌 차례대로 한 번씩만 실행했습니다. 환경은 맥(darwin arm64), Node.js v22.23.1, Claude Code 2.1.309, Homebrew로 설치된 Python 3.15.0입니다.

단계걸린 시간종료 코드
1. 파이썬 버전0.0초0
2. 한 줄 주석과 줄 끝 주석0.0초0
3. 여러 줄 주석을 #으로0.0초0
4. 삼중따옴표는 문자열0.0초0
5. docstring 읽기0.0초0
6. 문자열 속 #0.0초0
7. Claude Code에게 docstring 맡기기7.0초0

한 번만 잰 값이라 Claude Code 단계의 7.0초는 네트워크나 모델 응답에 따라 달라질 수 있습니다. 이 측정만으로는 시간이 어디서 쓰였는지 가를 수 없으니, 직접 확인하려면 같은 명령을 여러 번 돌려 비교해 보세요. 주석과 docstring의 동작 자체는 위 출력과 공식 문서가 말하는 범위에서만 확인했습니다.

참고 자료