5

我可以使用str.format()元组来访问参数:

>>> '{0}, {1}, {2}'.format('a', 'b', 'c')

'a, b, c'

或者

>>> t = ('a', 'b', 'c')
>>> '{0}, {1}, {2}'.format(*t)

'a, b, c'

但是使用以'f'(f-strings)为前缀的新格式化字符串文字,我如何使用元组?

f'{0}, {1}, {2}'.(*t)  # doesn't work
4

1 回答 1

7

您的第一次str.format()调用是带有 3 个参数的常规方法调用,其中不涉及元组。您的第二个调用使用*splat 调用语法;该str.format()调用接收 3 个单独的单独参数,它不在乎那些来自元组。

格式化字符串f不使用方法调用,因此您不能使用任何一种技术。相反,格式化字符串中的每个槽都f'..'作为正则 Python 表达式执行。

您必须直接从元组中提取值:

f'{t[0]}, {t[1]}, {t[2]}'

或首先将您的元组扩展为新的局部变量:

a, b, c = t
f'{a}, {b}, {c}'

或者干脆继续使用str.format()。您不必使用f'..'格式化字符串,这是该语言的一个新的附加功能,而不是替代str.format().

来自PEP 498 -文字字符串插值

此 PEP 不建议删除或弃用任何现有的字符串格式化机制。

于 2016-08-04T09:57:44.237 回答