Following system colour scheme - Python 增强提案 Selected dark colour scheme - Python 增强提案 Selected light colour scheme - Python 增强提案

Python 增强提案

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