如何将字符串格式作为变量传递给f字符串

时间:2019-02-20 06:50:15

标签: python string f-string

我正在使用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

有什么办法可以使这段代码起作用?要点是能够使用变量确定间距来控制间距。

2 个答案:

答案 0 :(得分: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)

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

答案 1 :(得分:2)

您应该将format_string作为变量

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

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