这是一个开始。在使用较长的字符串的代码之外定义较长的字符串并不是一个坏习惯。这是一种分离数据和行为的方法。你的第一个选择是将字符串文本隐式地连接在一起,使它们彼此相邻:
("This is the first line of my text, "
"which will be joined to a second.")
或者使用行结束的延续,这是比较脆弱的,如下所示:
"This is the first line of my text, " \
"which will be joined to a second."
但这不是:
"This is the first line of my text, " \
"which will be joined to a second."
看到区别了吗?没有?当这是你的代码时,你也不会。
(在第二个例子中\后面有一个空格。)
隐式连接的缺点是它只适用于字符串字面量,而不适用于从字符串中获取的字符串
变量,所以当你重构的时候,事情会变得更加复杂。此外,您只能在组合的字符串上作为一个整体插入格式。
或者,你可以使用连接运算符(+)显式地连接:
("This is the first line of my text, " +
"which will be joined to a second.")
正如python的禅意所说,显式比隐式更好,但这创建了三个字符串而不是一个,并且使用了两倍的内存:其中有两个是你写的,加上一个是它们连接在一起的,所以你必须知道什么时候忽略禅意。好处是可以将格式应用于
每一行上的任意子字符串,或从括号外的全部子字符串。
最后,你可以使用三引号字符串:
"""This is the first line of my text
which will be joined to a second."""
这通常是我最喜欢的,尽管它的行为略有不同,因为换行符和后续行上的任何前导空白将显示在最终字符串中。您可以使用转义反斜杠来消除换行符。
"""This is the first line of my text \
which will be joined to a second."""
这与上面的相同技术存在相同的问题,因为正确代码与错误代码的区别仅在于不可见的空白。
哪一种是“最好的”取决于你的具体情况,但答案不是简单的审美,而是一种微妙的不同行为。