3.1.2 Strings

파이썬에서는 숫자 외에도 다양한 문자열을 사용할 수 있습니다. 문자열은 작은따옴표나 큰 따옴표로 묶어서 표현합니다. 둘 중 어느것을 써도 결과는 같습니다.2 \는 '탈출 부호'(excape quotes)로 사용됩니다.

>>> 'spam eggs'  # 작은 따옴표로 표현한 문자열
'spam eggs'
>>> 'doesn\'t'  
"doesn't"
    # 작은 따옴표안에 또다시 작은 따옴표를 사용하려면
    # 다음과 같이 \' 작은 따옴표 앞에 역슬래시를 붙여줍니다.


>>> "doesn't"   # 또는 큰따옴표와 작은 따옴표를 섞어서 사용합니다.
"doesn't"

# 아래는 제대로 작동하지 않는 다양한 경우의 예시입니다.
>>> '"Yes," he said.'
'"Yes," he said.'  
>>> "\"Yes,\" he said."
'"Yes," he said.'
>>> '"Isn\'t," she said.'
'"Isn\'t," she said.'

대화형 인터프리터에서 결과로 출력되는 문자열은 따옴표로 둘러싸여 나타납니다. 특수문자는 백슬래시를 써서 탈출시킵니다. 때로 입력한 값과 출력한 값을 감싸는 따옴표가 달라질 수 있지만, 따옴표가 달라도 그 값은 동일합니다. 문자열 안에 작은 따옴표가 포함되어야 하면 문자열을 큰 따옴표로 둘러싸고, 문자열 안에 큰 따옴표가 있는 경우 작은 따옴표로 바깥을 둘러쌉니다. print()함수는 문자열을 둘러싸는 따옴표를 생략해주고, 탈출하거나 특수한 문자를 출력해줍니다.

>>> '"Isn\'t," she said.'
'"Isn\'t," she said.'

>>> print('"Isn\'t," she said.')
"Isn't," she said.

>>> s = 'First line.\nSecond line.'     # \n 은 줄바꿈을 의미합니다.
>>> s      # print()함수가 없는 경우, \n은 출력값에 포함됩니다.
'First line.\nSecond line.'

>>> print(s)  # print()함수와 함게 사용하면, \n은 줄바꿈으로 작동합니다.
First line.
Second line.


특수문자 앞에 역슬래시 \를 사용하면 문제가 생기는 경우, 첫번째 따옴표 앞에 r을 넣어 원시 문자열을 이용할 수 있습니다.

>>> print('C:\some\name')  # 여기서 \n 은 줄바꿈으로 작동합니다. 
C:\some
ame
>>> print(r'C:\some\name')  # 부호 앞쪽의 r에 주의하십시오.
C:\some\name


따옴표를 세개씩 사용하면 문자열을 여러줄에 걸쳐 사용할 수 있습니다. 줄의 끝이 문자열에 자동으로 포함되지만, 역슬래시를 줄의 끝에 추가하여 해결할 수 있습니다.

print("""\
Usage: thingy [OPTIONS]
     -h                        Display this usage message
     -H hostname               Hostname to connect to
""")


위의 예시는 다음과 같은 결과를 보여줍니다. 위 예시에서 print("""다음에 역슬래시\ 를 추가하여 첫 줄을 결과에 포함시키지 않은 것을 눈여겨 봅니다.

Usage: thingy [OPTIONS]
     -h                        Display this usage message
     -H hostname               Hostname to connect to


문자열은 연산기호 +를 이용해 연결할 수 있습니다. 연산기호*를 이용하면 문자열이 반복됩니다.

>>> # 3 times 'un', followed by 'ium'
>>> 3 * 'un' + 'ium'
'unununium'

두 개 또는 그 이상의 문자열들이 연이어 쓰인 경우 자동으로 연결된다.

>>> 'Py' 'thon'
'Python'

자동연결은 변수나 표현식에는 적용되지 않는다.

>>> prefix = 'Py'
>>> prefix 'thon'  # prefix라는 변수와 'thon'이라는 문자열은 자동으로 연결되지 않는다.
  ...
SyntaxError: invalid syntax
>>> ('un' * 3) 'ium'
  ...
SyntaxError: invalid syntax

변수들을 연결하거나 변수와 문자열을 연결하려면 +를 사용한다.

>>> prefix + 'thon'
'Python'

이러한 규칙은 우리가 긴 문자열을 쪼갤 때 유용하다.

>>> text = ('Put several strings within parentheses '
...         'to have them joined together.')
>>> text
'Put several strings within parentheses to have them joined together.'

문자열의 글자 하나하나는 배열순서에 따라 번호가 붙어있다.(= index = 색인) 번호는 0부터 세기 시작한다. 글자 하나는 크기가 1인 문자열이라고 볼 수도 있다.

>>> word = 'Python'
>>> word[0]  # 0번 자리(첫번째 자리)에 있는 글자
'P'
>>> word[5]  # 5번 자리(여섯번째 자리)에 있는 글자
'n'

마이너스를 사용하면 순서를 오른쪽에서부터 센다.

>>> word[-1]  # -1은 오른쪽 첫번째 글자를 가리킨다.
'n'
>>> word[-2]  # -2는 오른쪽에서 두번째 글자를 가리킨다.
'o'
>>> word[-6]
'P'

-0은 0과 같다. 따라서 음수(=마이너스)를 이용해 글자의 순서를 셀 때는 -1부터 시작한다.

우리는 인덱스를 이용해 문자열에서 원하는 부분만 잘라낼 수도 있다.(=슬라이싱) 인덱스만 사용하면 글자 하나가 떨어져 나오지만, 슬라이싱은 또다른 문자열을 가져온다.

>>> word[0:2]  # 0번 자리부터 2번 자리 앞까지 (2번 자리는 포함하지 않는다.)
'Py'
>>> word[2:5]  # 2번 자리부터 5번 자리 앞까지 (5번 자리는 포함하지 않는다.)
'tho'

앞쪽 인덱스는 언제나 포함되고, 뒤쪽 인덱스는 언제나 제외된다. 따라서 s[:i]+s[i:]는 언제나 s와 같다. (여기서 s는 sentence의 약자로 추측되는 변수이다. 아래 예시에서는 word.)

>>> word[:2] + word[2:]
'Python'
>>> word[:4] + word[4:]
'Python'

인덱스를 이용한 슬라이싱은 유용한 기본규칙을 가지고 있다. 슬라이싱을 할 때 앞쪽 인덱스를 생략하면 0으로 처리된다. 뒤쪽 인덱스를 생략하면 문자열의 끝까지 슬라이싱에 포함된다.

>>> word[:2]   # 0번 자리(첫번째 글자)부터 2번 자리(세번째 글자)앞쪽까지 (세번째 글자 제외)
'Py'
>>> word[4:]   # 4번 자리(다섯번째 글자)부터 문자열 끝까지
'on'
>>> word[-2:]  # 오른쪽에서 2번 자리부터 문자열 끝까지
'on'

인덱스가 작용하는 방식을 기억하려면 인덱스가 각 글자의 모서리(=edge)를 가리키는 것으로 생각하면 쉽다. 첫 번째 글자의 왼쪽 모서리는 0번, 첫 번째 글자와 두 번째 글자의 사이(두 번째 글자의 모서리)는 1번이다.

 +---+---+---+---+---+---+
 | P | y | t | h | o | n |
 +---+---+---+---+---+---+
 0   1   2   3   4   5   6
-6  -5  -4  -3  -2  -1

위 예시의 주황색 숫자 첫 줄은 문자열의 인덱스를 보여준다. 주황색 숫자 두 번째 줄은 음수를 이용한 인덱스이다. 만약 ij를 이용하여 슬라이싱을 한다면, i의 왼쪽 모서리부터 j의 왼쪽 모서리 안에 포함된 글자가 잘려나온다.

슬라이스를 할 때, 앞 뒤 인덱스가 모두 양수이면 슬라이스의 길이는 인덱스와 다르다. 예를 들어, word[1:3]의 길이는 2이다.

너무 큰 인덱스를 사용하면 문제가 생긴다.

>>> word[42]  # word는 6개의 글자만 가지고 있다.
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

참고) stdin = standard input

하지만 글자수를 벗어난 인덱스가 슬라이싱에서는 정상적으로 작동할 수도 있다.

>>> word[4:42]
'on'
>>> word[42:]
''

파이썬의 문자열은 한 번 설정되면 수정할 수 없다. 따라서 인덱스를 이용해 어떤 값을 지정하면 문제가 생긴다.

>>> word[0] = 'J'
  ...
TypeError: 'str' object does not support item assignment
# 타입에러 : 문자열은 수정이 불가능합니다.
>>> word[2:] = 'py'
  ...
TypeError: 'str' object does not support item assignment
# # 타입에러 : 문자열은 수정이 불가능합니다.

참고) str = string = 문자열

만약 다른 문자열이 필요하다면 우리는 새로 문자열을 만들어야 한다.

>>> 'J' + word[1:]
'Jython'
>>> word[:2] + 'py'
'Pypy'

파이썬에 기본적으로 미리 저장되어 있는 함수(=내장함수)인 len()은 문자열의 길이(총 글자수)를 알려준다.

참고)
Built-In Funcion = BIF = 내장함수
len = length

>>> s = 'supercalifragilisticexpialidocious'
>>> len(s)
34

See also : Text Sequence Type — str

Strings are examples of sequence types, and support the common operations supported by such types.

String Methods

Strings support a large number of methods for basic transformations and searching.

Format String Syntax

Information about string formatting with str.format().

printf-style String Formatting

The old formatting operations invoked when strings and Unicode strings are the left operand of the % operator are described in more detail here.

위 네 개 항목은 원본 문서에서는 링크가 걸려 있으나, 이 글에서는 아직 처리하지 못한 상태이다.


각주2

파이썬에서는 다른 프로그래밍 언어들과 다르게 \n과 같은 특별한 문자들도 작은 따옴표, 큰 따옴표와 같은 의미이다. 유일한 차이점은, 작은 따옴표로 문자열을 나타내면 굳이 큰 따옴표를 문자열 안에 사용하기 위해 다른 문자를 사용할 필요가 없다는 것이다. 큰 따옴표로 문자열을 나타낸 경우에도 작은 따옴표를 그 안에 사용할 수 있다.

results matching ""

    No results matching ""