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]으로 문자를 건너뛸 수 있습니다.
슬라이스 위치는 문자 사이에 놓입니다. 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().