Python Glossary English

Python 3.6+astпонятие

ast.FormattedValue

литералы

Узел подстановки {…} внутри f-строки: само выражение, код преобразования !r/!s/!a и спецификация формата. Живёт в списке values узла JoinedStr.

Синтаксис

ast.FormattedValue(value, conversion, format_spec=None)

Поле conversion — целое число, а не буква: -1 без преобразования, 115 для !s, 114 для !r, 97 для !a (это ord() буквы). Поле format_spec — не строка, а снова JoinedStr или None, потому что спецификация сама может содержать подстановки: f'{x:{width}}'. Сама f-строка — JoinedStr, и даже f'{x}' без текста вокруг даёт JoinedStr с одним FormattedValue внутри. Шаблонные t-строки из 3.14 дают другие узлы — TemplateStr и Interpolation.

Примеры

import ast
fstr = ast.parse('f"{x!r:>10}"', mode='eval').body
fv = fstr.values[0]
print(type(fstr).__name__, type(fv).__name__)  # → JoinedStr FormattedValue
print(fv.conversion, chr(fv.conversion))  # → 114 r
print(type(fv.format_spec).__name__, fv.format_spec.values[0].value)  # → JoinedStr >10
import ast
fv = ast.parse('f"{x}"', mode='eval').body.values[0]
print(fv.value.id, fv.conversion, fv.format_spec)  # → x -1 None

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности