如何在多行上编写f-string而不引入意外的空白?

14 浏览
0 Comments

如何在多行上编写f-string而不引入意外的空白?

考虑以下代码片段:

name1 = "Nadya"
name2 = "Jim"
def print_string():
    string = f"{name1}\n\
{name2}"
    print(string)
print_string()

运行结果为:

Nadya
Jim

这段代码能够正常工作,但是在`string`定义的第二行的缩进处有一个不美观的断行。我发现如果我对`{name2}`进行缩进,这个缩进会在最终的字符串中显示出来。

我尝试找到一种方法,可以在新的一行上继续使用f-string并进行缩进,但不会在最终的字符串中显示缩进。根据我在普通字符串中看到的类似方法,我尝试了以下代码:

name1 = "Nadya"
name2 = "Jim"
def print_string():
    string = f"{name1}\n"
             f"{name2}"
    print(string)
print_string()

但是这导致了一个`IndentationError: unexpected indent`错误。我是否有其他方法可以实现我想要的效果?

0
0 Comments

问题出现的原因是在使用f-string时,如果想要将字符串拆分成多行写,可能会引入意外的空格,导致输出结果不符合预期。解决这个问题的方法是使用括号或反斜杠来进行换行,以避免意外的空格。

以下是解决方法的具体步骤:

第一种方法是使用括号进行换行,代码如下:

string = (f"{name1}\n"
          f"{name2}"
         )

这种方法遵循了PEP-8的建议,可以避免意外的空格问题。

第二种方法是使用反斜杠进行换行,代码如下:

string = f"{name1}\n" \
         f"{name2}"

这种方法也可以实现换行,但是需要注意反斜杠要放在行末尾。

除了以上两种方法,还有一种方法是使用三重引号进行换行,代码如下:

string = f"""{name1}
{name2}"""

这种方法可以将字符串写在多行中,但是需要注意可能会导致额外的换行符被输出。

对于有多于两行的情况,使用括号进行换行可能会出现错误,此时可以尝试其他方法来解决。

总结起来,为了在f-string中实现多行写入而不引入意外的空格,可以使用括号或反斜杠进行换行,或者使用三重引号将字符串写在多行中。根据具体的情况选择合适的方法来解决问题。

0