使用 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
使用 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
str.format()
调用是一个带有3个参数的常规方法调用,其中没有涉及元组。你的第二个调用使用了*
展开调用语法;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 -- Literal String Interpolation,本提案并不打算移除或废弃任何现有的字符串格式化机制。请注意保留HTML标签。f'数值:{str(t)[1:-2]}'
。胜利! 但说真的,基于使用情景,新的方法可能会突然出现。我认为这个问题不可能被回答得太笼统。 - Markus Meskanenstr.format()
在Python 3.6中不会被弃用? - Trimax', '.join(t)
? - Martijn Pieters.format()
转换为f-strings,但会发现完全不同的方法...有时.format()
仍然是最好的选择。 - Markus Meskanen
', '.join(t)
来解决。 - Markus Meskanen'...'.format('a', 'b', 'c')
是一个方法调用,你使用了3个参数进行调用。在第一个例子中,你没有传入元组。而在第二个例子中,你使用了*args
的调用语法;str.format()
仍然接收到了3个单独的参数,并不知道你使用了元组来提供这些参数。 - Martijn Pietersf'{0}, {1}, {2}'.(*t)
不起作用。 - Trimax