Python 3.6+astпонятие
ast.JoinedStr
литералы
Узел f-строки: values — список кусков, где постоянный текст — Constant, а каждое поле {…} — FormattedValue.
Синтаксис
ast.JoinedStr(values)
f-строка без единого поля, f'abc', всё равно даёт JoinedStr, а не Constant — проверка «это строковая константа?» её пропустит. Соседние литералы сливаются при разборе: 'a' f'{b}' — один JoinedStr, и исходного деления на два литерала в дереве нет. Спецификатор формата после двоеточия — тоже JoinedStr, вложенный в FormattedValue.format_spec.
Примеры
import ast
node = ast.parse('f"x={x!r:>5}"', mode='eval').body
print(type(node).__name__) # → JoinedStr
print([type(v).__name__ for v in node.values]) # → ['Constant', 'FormattedValue']
fv = node.values[1]
print(fv.value.id, chr(fv.conversion), fv.format_spec.values[0].value) # → x r >5
import ast
print(type(ast.parse('f"abc"', mode='eval').body).__name__) # → JoinedStr
print(len(ast.parse('"a" f"{b}"', mode='eval').body.values)) # → 2
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности