Внутри f-строк допускаются как троичные ("if
выражения"), так и значения ("for
выражения"). Однако они должны быть частью выражений, которые оцениваются как строки. Например, key: value
- это пара dict, а f"{key}: {value}"
требуется для создания строки.
>>> dct = {'a': 1, 'b': 2}
>>> newline = "\n" # \escapes are not allowed inside f-strings
>>> print(f'{newline.join(f"{key}: {value}" for key, value in dct.items())}')
a: 1
b: 2
Обратите внимание, что если вся f-строка является выражением одного формата, проще просто оценивать выражение напрямую.
>>> print("\n".join(f"{key}: {value}" for key, value in dct.items())))
a: 1
b: 2
Выражения внутри строк формата по-прежнему следуют своей обычной семантике. Например, троичный может проверить, является ли существующее имя истинным. Сбой произойдет, если имя не определено.
>>> c, name = "Hello", ""
>>> f'{c} {name if name else "unknown"}'
'Hello unknown'
>>> del name
>>> f'{c} {name if name else "unknown"}'
NameError: name 'name' is not defined