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年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

最后修改:2025-02-01 08:55:40 GMT