PEP 295 – 多行字符串常量解释
- 作者:
- Stepan Koltsov <yozh at mx1.ru>
- 状态:
- 已拒绝
- 类型:
- 标准跟踪
- 创建日期:
- 2002年7月22日
- Python 版本:
- 3.0
- 发布历史:
摘要
本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.
此外,如果字符串是原始字符串,即指定了标志“r”,则可以禁用此功能。
版权
本文档已置于公共领域。
来源:https://github.com/python/peps/blob/main/peps/pep-0295.rst