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Сообщить о неточности