120 lines
2.7 KiB
Plaintext
120 lines
2.7 KiB
Plaintext
PEP: 295
|
|
Title: Interpretation of multiline string constants
|
|
Author: Stepan Koltsov <yozh@mx1.ru>
|
|
Status: Rejected
|
|
Type: Standards Track
|
|
Content-Type: text/x-rst
|
|
Created: 22-Jul-2002
|
|
Python-Version: 3.0
|
|
Post-History:
|
|
|
|
|
|
Abstract
|
|
========
|
|
|
|
This PEP describes an interpretation of multiline string constants
|
|
for Python. It suggests stripping spaces after newlines and
|
|
stripping a newline if it is first character after an opening
|
|
quotation.
|
|
|
|
|
|
Rationale
|
|
=========
|
|
|
|
This PEP proposes an interpretation of multiline string constants
|
|
in Python. Currently, the value of string constant is all the
|
|
text between quotations, maybe with escape sequences substituted,
|
|
e.g.::
|
|
|
|
def f():
|
|
"""
|
|
la-la-la
|
|
limona, banana
|
|
"""
|
|
|
|
def g():
|
|
return "This is \
|
|
string"
|
|
|
|
print repr(f.__doc__)
|
|
print repr(g())
|
|
|
|
prints::
|
|
|
|
'\n\tla-la-la\n\tlimona, banana\n\t'
|
|
'This is \tstring'
|
|
|
|
This PEP suggest two things:
|
|
|
|
- ignore the first character after opening quotation, if it is
|
|
newline
|
|
|
|
- ignore in string constants all spaces and tabs up to
|
|
first non-whitespace character, but no more than current
|
|
indentation.
|
|
|
|
After applying this, previous program will print::
|
|
|
|
'la-la-la\nlimona, banana\n'
|
|
'This is string'
|
|
|
|
To get this result, previous programs could be rewritten for
|
|
current Python as (note, this gives the same result with new
|
|
strings meaning)::
|
|
|
|
def f():
|
|
"""\
|
|
la-la-la
|
|
limona, banana
|
|
"""
|
|
|
|
def g():
|
|
"This is \
|
|
string"
|
|
|
|
Or stripping can be done with library routines at runtime (as
|
|
pydoc does), but this decreases program readability.
|
|
|
|
|
|
Implementation
|
|
==============
|
|
|
|
I'll say nothing about CPython, Jython or Python.NET.
|
|
|
|
In original Python, there is no info about the current indentation
|
|
(in spaces) at compile time, so space and tab stripping should be
|
|
done at parse time. Currently no flags can be passed to the
|
|
parser in program text (like ``from __future__ import xxx``). I
|
|
suggest enabling or disabling of this feature at Python compile
|
|
time depending of CPP flag ``Py_PARSE_MULTILINE_STRINGS``.
|
|
|
|
|
|
Alternatives
|
|
============
|
|
|
|
New interpretation of string constants can be implemented with flags
|
|
'i' and 'o' to string constants, like::
|
|
|
|
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.
|
|
|
|
Also this feature can be disabled if string is raw, i.e. if flag 'r'
|
|
specified.
|
|
|
|
|
|
Copyright
|
|
=========
|
|
|
|
This document has been placed in the Public Domain.
|