【问题标题】:How to pass string format as a variable to an f-string如何将字符串格式作为变量传递给 f 字符串
【发布时间】:2019-07-13 19:03:11
【问题描述】:

我正在使用 f 字符串,我需要定义一个依赖于变量的格式。

def display_pattern(n):
    temp = ''
    for i in range(1, n + 1):
        temp = f'{i:>3}' + temp
        print(temp)

如果相关,display_pattern(5) 的输出为:

  1
  2  1
  3  2  1
  4  3  2  1
  5  4  3  2  1

我想知道是否可以操纵>3 的格式,并改为传递一个变量。例如,我尝试了以下方法:

def display_pattern(n):
    spacing = 4
    format_string = f'>{spacing}' # this is '>4'
    temp = ''
    for i in range(1, n + 1):
        temp = f'{i:format_string}' + temp
        print(temp)

但是,我收到以下错误:

Traceback (most recent call last):
  File "pyramid.py", line 15, in <module>
    display_pattern(8)
  File "pyramid.py", line 9, in display_pattern
    temp = f'{i:format_string}' + temp
ValueError: Invalid format specifier

有什么方法可以让这段代码工作吗?要点是能够使用变量来控制间距来确定填充量。

【问题讨论】:

    标签: python string f-string


    【解决方案1】:

    你应该把format_string 作为变量

    temp = f'{i:{format_string}}' + temp
    

    : 之后的下一个代码在您明确指出之前不会被解析为变量。 感谢@timpietzcker 提供文档链接:formatted-string-literals

    【讨论】:

    • 您最多可以将变量嵌套到一层:docs.python.org/3/whatsnew/…
    • 是的,但在您明确指出之前,: 之后的下一个代码不会被解析为变量。
    • @bearbrown,感谢您提供详细的解释。这解决了我所有的疑惑。
    【解决方案2】:

    您需要保持对齐和填充标记彼此分开:

    def display_pattern(n):
        padding = 4
        align = ">"
        temp = ''
        for i in range(1, n + 1):
            temp = f'{i:{align}{padding}}' + temp
            print(temp)
    

    编辑:

    我认为这不太正确。我已经进行了一些测试,并且以下工作也有效:

    def display_pattern(n):
        align = ">4"
        temp = ''
        for i in range(1, n + 1):
            temp = f'{i:{align}}' + temp
            print(temp)
    

    所以我真的不能说为什么你的方法不起作用......

    【讨论】:

    • 为什么在这种情况下放置一个嵌套的{} 有效?我的意思是{align}{padding}{} 里面。
    • 我认为你不应该删除你的帖子它帮助我找到了解决方案。
    猜你喜欢
    • 2021-09-25
    • 1970-01-01
    • 2022-12-07
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多