PEP 295 – Interpretation von mehrzeiligen String-Konstanten
- Autor:
- Stepan Koltsov <yozh at mx1.ru>
- Status:
- Abgelehnt
- Typ:
- Standards Track
- Erstellt:
- 22. Juli 2002
- Python-Version:
- 3.0
- Post-History:
Inhaltsverzeichnis
Zusammenfassung
Dieses PEP beschreibt eine Interpretation von mehrzeiligen String-Konstanten für Python. Es wird vorgeschlagen, Leerzeichen nach Zeilenumbrüchen zu entfernen und einen Zeilenumbruch zu entfernen, wenn er das erste Zeichen nach einem öffnenden Anführungszeichen ist.
Begründung
Dieses PEP schlägt eine Interpretation von mehrzeiligen String-Konstanten in Python vor. Derzeit ist der Wert einer String-Konstante der gesamte Text zwischen den Anführungszeichen, möglicherweise mit ersetzten Escape-Sequenzen, z. B.
def f():
"""
la-la-la
limona, banana
"""
def g():
return "This is \
string"
print repr(f.__doc__)
print repr(g())
gibt aus
'\n\tla-la-la\n\tlimona, banana\n\t'
'This is \tstring'
Dieses PEP schlägt zwei Dinge vor
- ignoriere das erste Zeichen nach dem öffnenden Anführungszeichen, wenn es ein Zeilenumbruch ist
- ignoriere in String-Konstanten alle Leerzeichen und Tabs bis zum ersten Nicht-Whitespace-Zeichen, aber nicht mehr als die aktuelle Einrückung.
Nachdem dies angewendet wurde, wird das vorherige Programm Folgendes ausgeben
'la-la-la\nlimona, banana\n'
'This is string'
Um dieses Ergebnis zu erzielen, könnten die vorherigen Programme für das aktuelle Python umgeschrieben werden (beachten Sie, dass dies mit neuer String-Bedeutung dasselbe Ergebnis liefert)
def f():
"""\
la-la-la
limona, banana
"""
def g():
"This is \
string"
Oder das Entfernen kann mit Bibliotheksroutinen zur Laufzeit erfolgen (wie es pydoc tut), aber dies verringert die Lesbarkeit des Programms.
Implementierung
Über CPython, Jython oder Python.NET werde ich nichts sagen.
Im ursprünglichen Python gibt es zur Kompilierzeit keine Informationen über die aktuelle Einrückung (in Leerzeichen), daher sollte das Entfernen von Leerzeichen und Tabs zur Parse-Zeit erfolgen. Derzeit können keine Flags an den Parser im Programmtext übergeben werden (wie from __future__ import xxx). Ich schlage vor, diese Funktion zur Python-Kompilierzeit zu aktivieren oder zu deaktivieren, abhängig vom CPP-Flag Py_PARSE_MULTILINE_STRINGS.
Alternativen
Eine neue Interpretation von String-Konstanten kann mit den Flags 'i' und 'o' zu String-Konstanten implementiert werden, wie z. B.
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.
Außerdem kann diese Funktion deaktiviert werden, wenn der String ein Roh-String ist, d. h. wenn das Flag 'r' angegeben ist.
Urheberrecht
Dieses Dokument wurde gemeinfrei erklärt.
Quelle: https://github.com/python/peps/blob/main/peps/pep-0295.rst
Zuletzt geändert: 2025-02-01 08:55:40 GMT