【问题标题】:Positional arguments in Python string formatting: str.format vs f-stringPython 字符串格式中的位置参数:str.format vs f-string
【发布时间】:2023-03-11 12:34:01
【问题描述】:

在尝试使用新的(很棒的)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 在语法上有何区别?为什么这个例子略有不同?

【问题讨论】:

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


    【解决方案1】:

    你误解了'{: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)

    【讨论】:

    • 嗯,这是一个简单的解决方案!谢谢。
    猜你喜欢
    • 2011-07-02
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多