PEP 295, Interpretation of multiline string constants, Koltsov
This commit is contained in:
parent
a2d549a704
commit
52eae5725e
|
@ -0,0 +1,122 @@
|
|||
PEP: 295
|
||||
Title: Interpretation of multiline string constants
|
||||
Version: $Revision$
|
||||
Last-Modified: $Date$
|
||||
Author: yozh@mx1.ru (Stepan Koltsov)
|
||||
Status: Draft
|
||||
Type: Standards Track
|
||||
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
|
||||
- second: ignore in string constants all spaces and tabs up to
|
||||
first non-whitespace character, but no more then 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.
|
||||
|
||||
|
||||
|
||||
Local Variables:
|
||||
mode: indented-text
|
||||
indent-tabs-mode: nil
|
||||
sentence-end-double-space: t
|
||||
fill-column: 70
|
||||
End:
|
Loading…
Reference in New Issue