2

我想指定一个同时包含续行字符和连接字符的字符串。如果我要回显一堆相关值,这真的很有用。这是一个只有两个参数的简单示例:

temp = "here is\n"\
    +"\t{}\n"\
    +"\t{}".format("foo","bar")
print(temp)

这是我得到的:

here is
    {}
    foo

这就是我的期望:

here is
    foo
    bar

是什么赋予了?

4

4 回答 4

4

你可以尝试这样的事情:

temp = ("here is\n"
        "\t{}\n"
        "\t{}".format("foo","bar"))
print(temp)

或喜欢:

# the \t have been replaced with
# 4 spaces just as an example
temp = '''here is
    {}
    {}'''.format

print(temp('foo', 'bar'))

与你所拥有的相比:

a = "here is\n"
b = "\t{}\n"
c = "\t{}".format("foo","bar")
print( a + b + c)
于 2018-01-29T19:02:20.533 回答
3

str.format在连接字符串之前调用。把它想象成1 + 2 * 3,在加法之前计算乘法。

只需将整个字符串括在括号中,以表明您希望在调用之前连接字符串str.format

temp = ("here is\n"
      + "\t{}\n"
      + "\t{}").format("foo","bar")
于 2018-01-29T19:04:48.053 回答
2

Python 实际上看到了这一点:

Concatenate the result of
    "here is\n"
with the resuslt of
    "\t{}\n"
with the result of
    "\t{}".format("foo","bar")

您有 3 个单独的字符串文字,并且只有最后一个应用了该str.format()方法。

请注意,Python 解释器在运行时连接字符串。

您应该改用隐式字符串文字连接。每当您在表达式中并排放置两个字符串文字且中间没有其他运算符时,您都会得到一个字符串:

"This is a single" " long string, even though there are separate literals"

这与字节码一起存储为单个常量:

>>> compile('"This is a single" " long string, even though there are separate literals"', '', 'single').co_consts
('This is a single long string, even though there are separate literals', None)
>>> compile('"This is two separate" + " strings added together later"', '', 'single').co_consts
('This is two separate', ' strings added together later', None)

字符串文字连接文档

允许多个相邻的字符串或字节文字(由空格分隔),可能使用不同的引用约定,并且它们的含义与它们的连接相同。因此,"hello" 'world'等价于"helloworld"

当您使用隐式字符串文字连接时,.format()最后的任何调用都将应用于整个单个字符串

接下来,您不想使用\反斜杠续行。改用括号,它更干净:

temp = (
    "here is\n"
    "\t{}\n"
    "\t{}".format("foo","bar"))

这称为隐式线连接

您可能还想了解多行字符串文字,其中在开头和结尾使用三个引号。此类字符串中允许换行并保留为值的一部分:

temp = """\
here is
\t{}
\t{}""".format("foo","bar")

\在打开后使用了反斜杠"""来逃避第一个换行符。

于 2018-01-29T19:21:06.880 回答
1

格式函数仅适用于最后一个字符串。

temp = "here is\n"\
    +"\t{}\n"\
    +"\t{}".format("foo","bar")

正在这样做:

temp = "here is\n" + "\t{}\n"\ + "\t{}".format("foo","bar")

关键是该.format()函数只发生在最后一个字符串上:

"\t{}".format("foo","bar")

您可以使用括号获得所需的结果:

temp = ("here is\n"\
    +"\t{}\n"\
    +"\t{}").format("foo","bar")
print(temp)

#here is
#   foo
#   bar
于 2018-01-29T19:02:27.997 回答