Jon*_*ler 2 python string format positional-parameter python-3.6
当尝试使用新的(和令人敬畏的)python 3 文字字符串插值的一些功能时,我发现了这种奇怪的区别.
例如,使用旧的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 之间的语法差异是什么?为什么这个例子略有不同?
use*_*ica 10
你误会了什么'{:0{N}d}'.format(d, N=N).该d格式规范不引用变量d; 它意味着在基数10中打印一个整数.Python将该字段与d参数进行位置匹配.
当你尝试使用f-string时f'{:0{N}d}',f-strings没有位置参数.Python不知道该字段的格式.你需要修复你原来的bug并放在d前面,:所以Python知道它应该在d那里格式化.
作为参考,正确的版本format会一直'{d:0{N}}'.format(d=d, N=N).
| 归档时间: | 
 | 
| 查看次数: | 2077 次 | 
| 最近记录: |