如何在不引入意外空格的情况下在多行上编写 f 字符串? [复制]

Posted

技术标签:

【中文标题】如何在不引入意外空格的情况下在多行上编写 f 字符串? [复制]【英文标题】:How to write an f-string on multiple lines without introducing unintended whitespace? [duplicate] 【发布时间】:2018-08-31 03:30:22 【问题描述】:

考虑以下代码sn-p:

name1 = "Nadya"
name2 = "Jim"

def print_string():
    string = f"name1\n\
name2"
    print(string)

print_string()

产生

Nadya
Jim

这可行,但string 定义的第二行缩进中的“中断”看起来很难看。我发现如果我缩进 name2 行,这个缩进会出现在最后的字符串中。

我正在尝试找到一种方法来在新行上继续 f 字符串并缩进它,而缩进不会出现在最终字符串中。按照我在普通字符串中看到的类似内容,我尝试过

name1 = "Nadya"
name2 = "Jim"

def print_string():
    string = f"name1\n"
             f"name2"
    print(string)

print_string()

但这会导致IndentationError: unexpected indent。我正在尝试的方法是否可行?

【问题讨论】:

您可以在字符串外部使用反斜杠续行,这与您在第一个示例中在字符串内部执行的方式完全相同。然后它们与解析器是同一行,所以没有缩进问题。或者您可以在字符串周围放置其他无意义的括号,然后您就不需要反斜杠(尽管有些 linter 可能会抱怨,因为他们认为您正在尝试创建一个元组而忘记了逗号)。 另外,你知道三引号字符串吗?它们对 f 字符串和静态字符串一样有效。而且,除非name1name2 中的值将是多行的,否则像textwrap.dedent 这样的所有常见内容都可以很好地与评估的f-string 一起使用,所以几十年来关于如何使用的所有信息三引号字符串有效地适用于大多数三引号 f 字符串。 【参考方案1】:
string = f"name1\n"   \   # line continuation character
         f"name2"

【讨论】:

谢谢。这对我有用。而dedent(repr(dedent( 没有 按 PEP8 降级:The preferred way of wrapping long lines is by using Python's implied line continuation inside parentheses, brackets and braces. Long lines can be broken over multiple lines by wrapping expressions in parentheses. These should be used in preference to using a backslash for line continuation.:string = ( f"name\n" f"name2" ) ``` string = f""" name1 name2 """ ``

以上是关于如何在不引入意外空格的情况下在多行上编写 f 字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用边框间距和空行的情况下在带有边框的表格行之间添加空格

如何在不折叠空格的情况下在 bash 脚本中拆分制表符分隔的字符串?

如何在不使用 getline 的情况下在 C++ 中将输入字符串直到行尾

如何在不使用 &nbsp 的情况下在行内元素之间添加空格 [重复]

Actionscript 3.0:如何在不跳过特定帧上编写的任何代码的情况下创建快进按钮?

如何在没有意外匹配的情况下在 PHP 中的字符串中查找整个单词?