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는 파이썬을 위한 여러 줄 문자열 상수의 해석 방식을 설명합니다. 개행 문자 뒤의 공백을 제거하고, 여는 인용부호 다음의 첫 문자가 개행이면 이를 제거할 것을 제안합니다.

근거

이 PEP는 파이썬에서 여러 줄 문자열 상수의 해석 방식을 제안합니다. 현재 문자열 상수의 값은 이스케이프 시퀀스가 치환되었을 수도 있는, 인용부호 사이의 모든 텍스트입니다. 예를 들면,:

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'

이 결과를 얻기 위해, 앞의 프로그램들은 현재 파이썬으로 다음과 같이 다시 작성할 수 있습니다(이는 새로운 문자열 의미로도 동일한 결과를 냅니다).:

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’ 플래그가 지정된 경우에는 이 기능을 비활성화할 수 있습니다.