Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python 개선 제안 한국어 번역

PEP 295 – 여러 줄 문자열 상수의 해석

Author:
Stepan Koltsov <yozh at mx1.ru>
Status:
Rejected
Type:
Standards Track
Created:
22-Jul-2002
Python-Version:
3.0
Post-History:


Table of Contents

번역·라이선스 안내

이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판

초록

이 PEP는 Python의 여러 줄 문자열 상수에 대한 해석을 설명합니다. 줄바꿈 뒤의 공백을 제거하고, 여는 따옴표 바로 뒤의 첫 문자가 줄바꿈이면 그 줄바꿈을 제거할 것을 제안합니다.

근거

이 PEP는 Python에서 여러 줄 문자열 상수를 해석하는 방식을 제안합니다. 현재 문자열 상수의 값은 따옴표 사이의 모든 텍스트이며, 경우에 따라 이스케이프 시퀀스가 치환됩니다. 예를 들어 다음 코드는:

def f():
    """
    la-la-la
    limona, banana
    """

def g():
    return "This is \
    string"

print repr(f.__doc__)
print repr(g())

다음을 출력합니다:

'\n\tla-la-la\n\tlimona, banana\n\t'
'This is \tstring'

이 PEP는 두 가지를 제안합니다:

  • 여는 따옴표 뒤의 첫 문자가 줄바꿈이면 그 문자를 무시합니다
  • 문자열 상수에서 공백이 아닌 첫 문자가 나올 때까지의 모든 공백과 탭을 무시하되, 현재 들여쓰기보다 많이 무시하지는 않습니다.

이를 적용하면 앞의 프로그램은 다음을 출력합니다:

'la-la-la\nlimona, banana\n'
'This is string'

이 결과를 얻으려면 기존 프로그램을 현재 Python에 맞게 다음과 같이 다시 작성할 수 있습니다(참고로, 이 코드는 새로운 문자열 의미에서도 같은 결과를 냅니다).:

def f():
    """\
la-la-la
limona, banana
"""

def g():
  "This is \
string"

또는 (pydoc이 하는 것처럼) 런타임에 라이브러리 루틴으로 제거할 수도 있지만, 이렇게 하면 프로그램의 가독성이 떨어집니다.

구현

CPython, Jython, Python.NET에 대해서는 아무것도 언급하지 않겠습니다.

원래 Python에서는 컴파일 시점에 현재 들여쓰기(공백 수)에 대한 정보가 없으므로, 공백과 탭 제거는 파싱 시점에 이루어져야 합니다. 현재는 프로그램 텍스트 안에서 (from __future__ import xxx처럼) 파서에 플래그를 전달할 방법이 없습니다. 저는 CPP 플래그 Py_PARSE_MULTILINE_STRINGS에 따라 Python 컴파일 시점에 이 기능을 활성화하거나 비활성화할 것을 제안합니다.

대안

문자열 상수의 새로운 해석은 다음과 같이 문자열 상수에 ‘i’와 ‘o’ 플래그를 붙이는 방식으로 구현할 수도 있습니다:

i"""
SELECT * FROM car
WHERE model = 'i525'
""" is in new style,

o"""SELECT * FROM employee
WHERE birth < 1982
""" is in old style, and

"""
SELECT employee.name, car.name, car.price FROM employee, car
WHERE employee.salary * 36 > car.price
""" is in new style after Python-x.y.z and in old style otherwise.

또한 문자열이 raw 문자열이면, 즉 ‘r’ 플래그가 지정되어 있으면 이 기능을 비활성화할 수 있습니다.