2

在尝试使用新的(并且很棒的)python 3文字字符串插值的一些功能时,我发现了这个奇怪的区别。

例如,使用 old 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-strings,只有调用。

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

4

1 回答 1

10

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

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

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

于 2017-07-22T21:21:05.097 回答