Python : 홑/겹 따옴표, 그리고 3 연따?

3연따는, ‘3회 연속된 따옴표’를 말한다. 즉, ”’ 또는 “””. ㅋㅋ

박사님‘의 글을 인용해본다.

잘 정리되어 있으니 참고하면 되겠고, 3연따에 대해서만 간단히 정리한다.

3연따는 주로 Docstring 을 만들 때 쓰인다. 또는, 여러 행에 걸친 주석을 쓸 때도 사용된다.

그런데, 박사님이 말씀하신 바와 같이, 문자열 안에 홑/겹따옴표를 포함하고자 할 때도 쓰인다. 이렇게 하면, 이스케이프 문자를 쓰지 않아도 되니 코드 작성시 신경쓸 부분이 조금은 줄어든다.

print('''She said, "Thank you! It's mine."''')
She said, "Thank you! It's mine."

이때, Raw String(r 기호)는 필수는 아니다. Raw String 은 \ 이 포함되느냐 아니냐 여부가 더 중요한 듯 하다.
아래에서 보는 바와 같이 결과는 같다.

print(r'''She said, "Thank you! It's mine."''')
She said, "Thank you! It's mine."

한가지 주의할 점은 있다. 만약 따옴표를 문장 시작이나 끝에 넣고자 할 때는, 3연따를 그 따옴표와는 다른 것으로 택해야만 한다. (안 그러면 오류가 쾅!)

뭔 말인지는 다음 예를 보면 알 수 있겠지..??

print('''She said, "Thank you! It's mine."''')
She said, "Thank you! It's mine."

print("""She said, "Thank you! It's mine."""")
  File "<stdin>", line 1
    print("""She said, "Thank you! It's mine."""")
                                                 ^
SyntaxError: EOL while scanning string literal

It’s mine” 하면서 겹따옴표로 끝났고, 이 따옴표까지 포함하려고 했는데, 이 문자열 전체를 ‘3연겹따’로 감쌌기 때문에 오류가 발생했다. 이럴 경우엔 첫번째 예처럼 3연홑따를 사용해야 한다.


또 하나, 아주 긴 문장을 여러 줄로 나눠 입력할 때 3연따를 사용하면 된다고 어디서 본 듯도 한데, 이건 안된다.

예를 들어, 아래는 원래 한 줄인데, 그냥 중간에 줄바꿈을 해본 상태다.

def main():
    myMessage = """"5QG9ol3La6QI93!xQxaia6faQL9QdaQG1!!axQARLa!!AuaRLQADQALQG93!xQxaGaAfaQ1QX3o1RQARL
9Qda!AafARuQLX1LQALQI1iQX3o1RN"Q-5!1RQP36ARu"""

이렇게 하면 결과는 줄바꿈(\n) 이 들어간 문자열 그대로 출력이 된다.

** 두번째 줄(또는 세번째, 네번째.. 도 마찬가지)에서 들여쓰기를 하면, 들여쓰기한 자체를 공백으로 인식한다.

한 줄을 원한다면, 행 끝에 \ 를 넣어줘야 한다. 물론, 들여쓰기도 없어야 한다.

def main():
    myMessage1 = "\"5QG9ol3La6QI93!xQxaia6faQL9QdaQG1!!axQARLa!!AuaRLQADQALQG93!xQxaGaAfaQ1QX3o1RQARL\
9Qda!AafARuQLX1LQALQI1iQX3o1RN\"Q-5!1RQP36ARu"

이러면 한 줄로 이어진 문자열로 인식된다.

그런데.. 이 방법도 그다지 좋진 못하다.
바로 들여쓰기 때문인데, 예에 있는 main() 처럼 들여쓰기가 4칸 정도밖에 안되면 상관이 없지만, 들여쓰기가 많아지면(예를 들어 12칸 정도만 되어도), 다른 열보다 껑충 튀어 나와서 보기에 영~.

따라서, 이렇게 하라고 한다.

    long_string = (
                'Lorem ipsum dolor sit amet, consectetur adipisicing elit, '
                'sed do eiusmod tempor incididunt ut labore et dolore magna '
                'aliqua. Ut enim ad minim veniam, quis nostrud exercitation '
                'ullamco laboris nisi ut aliquip ex ea commodo consequat. '
                'Duis aute irure dolor in reprehenderit in voluptate velit '
                'esse cillum dolore eu fugiat nulla pariatur. Excepteur sint '
                'occaecat cupidatat non proident, sunt in culpa qui officia '
                'deserunt mollit anim id est laborum.'
    )

마치 튜플같지만, 튜플이 아니고 그냥 문자열로 인식되며, 들여쓰기는 맘대로(?) 해도 된다.

저렇게 과도하게 들여쓰기를 해도 잘 인식되고, 저 상태에서 Autopep8 을 적용하면 좀 더 보기좋게 정렬된다.

    long_string = (
        'Lorem ipsum dolor sit amet, consectetur adipisicing elit, '
        'sed do eiusmod tempor incididunt ut labore et dolore magna '
        'aliqua. Ut enim ad minim veniam, quis nostrud exercitation '
        'ullamco laboris nisi ut aliquip ex ea commodo consequat. '
        'Duis aute irure dolor in reprehenderit in voluptate velit '
        'esse cillum dolore eu fugiat nulla pariatur. Excepteur sint '
        'occaecat cupidatat non proident, sunt in culpa qui officia '
        'deserunt mollit anim id est laborum.'
    )
Author: 아무도안

안녕하세요. 글 남겨주셔서 고맙습니다.