PEP 295 – 多行字符串常量的解释
- 作者:
- Stepan Koltsov <yozh at mx1.ru>
- 状态:
- 已拒绝
- 类型:
- 标准跟踪
- 创建时间:
- 2002-07-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
最后修改时间:2023-09-09 17:39:29 GMT