Python 字符串格式中的位置参数:str.format vs f-string
Posted
技术标签:
【中文标题】Python 字符串格式中的位置参数:str.format vs f-string【英文标题】:Positional arguments in Python string formatting: str.format vs f-string 【发布时间】:2017-12-28 18:45:00 【问题描述】:在尝试使用新的(很棒的)python 3 literal string interpolation 的一些功能时,我发现了这个奇怪的区别。
例如,使用旧的str.format
,我可以像这样格式化具有动态位数的整数:
>>> d = 5
>>> N = 3
>>> ':0Nd'.format(d, N=N)
'005'
但是当我尝试使用文字字符串等效时,我得到一个错误:
>>> f':0Nd'
SyntaxError: f-string: empty expression not allowed
只有交换参数的顺序才能得到正确的格式
>>> f'd:0N'
'005'
这让我觉得很奇怪,因为我认为我可以直接切换到 f 字符串而不修改我的字符串,只修改调用。
str.format
和 f-string 在语法上有何区别?为什么这个例子略有不同?
【问题讨论】:
【参考方案1】:你误解了':0Nd'.format(d, N=N)
的作用。格式规范中的d
没有引用变量d
;这意味着以 10 为基数打印一个整数。Python 在位置上将该字段与 d
参数匹配。
当您尝试使用 f 字符串 f':0Nd'
时,f 字符串没有位置参数。 Python 不知道该字段的格式。您需要修复原始错误并将d
放在:
前面,以便Python 知道它应该在那里格式化d
。
作为参考,format
的正确版本应该是 'd:0N'.format(d=d, N=N)
。
【讨论】:
嗯,这是一个简单的解决方案!谢谢。以上是关于Python 字符串格式中的位置参数:str.format vs f-string的主要内容,如果未能解决你的问题,请参考以下文章