Python str.format,包含字符串连接和延续

时间:2018-01-29 18:58:32

标签: python string format concatenation continuation

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

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

这是我得到的:

here is
    {}
    foo

这就是我的期望:

here is
    foo
    bar

是什么给出了?

4 个答案:

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

VS。你有什么:

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

答案 1 :(得分:3)

在连接字符串之前调用

str.format。可以把它想象成1 + 2 * 3,其中在加法之前评估乘法。

只需将整个字符串括在括号中,表示在调用str.format之前需要连接字符串:

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

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

来自String literal concatenation documentation

  

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

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

接下来,您不希望使用\反斜杠行继续。请使用括号,它更清晰:

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

这称为implicit line joining

您可能还想了解多行字符串文字,其中您在开头和结尾使用三个引号。这些字符串中允许使用换行符,并且仍然是值的一部分:

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

我在打开\后使用"""反斜杠来转义第一个换行符。

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