Python字符串格式中的位置参数:str.format vs f-string

时间:2017-07-22 21:11:42

标签: python string format python-3.6 positional-parameter

当尝试使用新的(和令人敬畏的)python 3 literal string interpolation的一些功能时,我发现了这个奇怪的区别。

例如,使用旧的str.format,我可以使用动态的位数格式化整数,如下所示:

>>> d = 5
>>> N = 3
>>> '{:0{N}d}'.format(d, N=N)
'005' 

但是当我使用文字字符串尝试等效字符时,我收到错误:

>>> f'{:0{N}d}'
SyntaxError: f-string: empty expression not allowed

只有通过交换参数的顺序才能获得正确的格式

>>> f'{d:0{N}}'
'005'

这让我感到很奇怪,因为我以为我可以在不修改字符串的情况下交换到f字符串,只调用调用。

str.format和f-string之间的语法差异是什么?为什么这个例子略有不同?

1 个答案:

答案 0 :(得分:9)

你误解了'{:0{N}d}'.format(d, N=N)的作用。格式规范中的d未引用变量d;它意味着在基数10中打印一个整数.Python将该字段与d参数进行位置匹配。

使用f-string f'{:0{N}d}'尝试时,f-strings没有位置参数。 Python不知道该字段的格式。您需要修复原始错误并将d放在:前面,以便Python知道它应该格式化d

作为参考,format的正确版本为'{d:0{N}}'.format(d=d, N=N)