2.4. 문자열

문자열(string)은 따옴표 사이에 작성된 유니코드 문자의 시퀀스입니다. 작은따옴표와 큰따옴표는 동등하므로, 텍스트 내부에 나타나는 따옴표를 이스케이프하지 않아도 되는 스타일을 선택하세요:

name    = "OpenMV Cam"
company = 'OpenMV, LLC'
message = "She said \"hi\""        # both styles can be used
same    = 'She said "hi"'

삼중 따옴표 문자열("""...""" 또는 '''...''')은 여러 줄에 걸쳐 작성되며 줄바꿈을 그대로 보존합니다:

banner = """boot ok
firmware v1.28
"""
print(banner)

출력:

boot ok
firmware v1.28

2.4.1. 이스케이프 시퀀스

일반 문자열 안에서 \는 특수 문자를 도입합니다:

  • \n – 줄바꿈

  • \t – 탭

  • \\ – 리터럴 백슬래시

  • \' / \" – 리터럴 따옴표(그렇지 않으면 문자열을 끝낼 경우)

  • \xHH – 16진수 코드 HH에 해당하는 문자

  • \uHHHH – 유니코드 코드포인트 HHHH

문자열에 백슬래시가 많이 포함된 경우, 리터럴 앞에 r을 붙여 원시(raw) 문자열로 만드세요. 그러면 백슬래시가 그대로 해석되어 – \n은 줄바꿈으로 대체되지 않고 두 문자 그대로 유지됩니다:

win_path = r"C:\Users\OpenMV\camera.py"
literal  = r"\n is two characters, not a newline"

2.4.2. 연결과 반복

두 문자열은 +로 결합하고, 문자열은 *로 반복합니다:

greeting = "Hello, " + name + "!"
line     = "-" * 40              # 40-character separator

루프에서 +를 반복하면 매 반복마다 새로운 문자열이 할당됩니다. 여러 조각으로부터 큰 문자열을 만들 때는 str.join()을 사용하세요.

2.4.3. 길이, 인덱싱, 슬라이싱

len()은 문자열의 문자 개수를 반환합니다. []로 인덱싱하면 지정된 위치에 있는 한 문자짜리 문자열을 반환하며, 음수 인덱스는 끝에서부터 셉니다:

>>> s = "OpenMV"
>>> len(s)
6
>>> s[0]
'O'
>>> s[-1]
'V'

슬라이스 s[start:stop]start 위치부터 stop 직전까지의 부분 문자열을 반환합니다. 양쪽 끝은 생략하여 “처음” 또는 “끝”을 의미할 수 있으며, 선택적인 세 번째 값 s[start:stop:step]으로 문자를 건너뛸 수 있습니다.

각 문자 사이에 위치 표시가 있는 문자열 "OpenMV"로, 슬라이스가 두 위치 사이의 문자를 어떻게 선택하는지 보여줍니다.

슬라이스 위치는 문자 사이에 놓입니다. s[2:5]는 위치 2, 3, 4에 있는 문자를 선택합니다.

>>> s = "OpenMV"
>>> s[2:5]
'enM'
>>> s[:3]
'Ope'
>>> s[3:]
'nMV'
>>> s[::-1]
'VMnepO'                     # whole string, reversed

범위를 벗어난 슬라이스는 존재하는 부분만 조용히 반환합니다 – s[100:200]은 오류가 아니라 빈 문자열 ""입니다. 반면 범위를 벗어난 인덱싱은 IndexError를 발생시킵니다.

2.4.4. 불변성

문자열은 제자리에서 수정할 수 없습니다. 문자열을 변경하는 것처럼 보이는 연산은 실제로는 새 문자열을 반환하고 원본은 그대로 둡니다:

>>> name = "OpenMV"
>>> name.upper()
'OPENMV'
>>> name
'OpenMV'                     # unchanged

문자열을 “변경”하려면 이름을 새 값에 다시 바인딩하세요: name = name.upper().