使用字符串的 Python 样式行延续?

为了遵守 Python 风格的规则,我将我的编辑器设置为最多79个协议。

在 PEP 中,建议在括号、括号和大括号中使用 python 的隐含延续。然而,当处理字符串时,当我达到 coll 限制时,它会变得有点奇怪。

例如,尝试使用多行

mystr = """Why, hello there
wonderful stackoverflow people!"""

会回来的

"Why, hello there\nwonderful stackoverflow people!"

这种方法是有效的:

mystr = "Why, hello there \
wonderful stackoverflow people!"

因为它返回了这个:

"Why, hello there wonderful stackoverflow people!"

但是,当语句缩进几个街区时,这看起来很奇怪:

do stuff:
and more stuff:
and even some more stuff:
mystr = "Why, hello there \
wonderful stackoverflow people!"

如果你尝试缩进第二行:

do stuff:
and more stuff:
and even some more stuff:
mystr = "Why, hello there \
wonderful stackoverflow people!"

字符串的结尾是:

"Why, hello there                wonderful stackoverflow people!"

我想到的唯一解决办法是:

do stuff:
and more stuff:
and even some more stuff:
mystr = "Why, hello there" \
"wonderful stackoverflow people!"

我更喜欢它,但是它的眼睛也有点不舒服,因为它看起来就像有一根绳子坐在无所适从(电影)上。这将产生适当的:

"Why, hello there wonderful stackoverflow people!"

所以,我的问题是——有些人对于如何做这件事有什么建议吗? 我是否在风格指南中遗漏了什么,没有说明我应该如何做这件事?

谢谢。

138603 次浏览

我已经解决了这个问题

mystr = ' '.join(
["Why, hello there",
"wonderful stackoverflow people!"])

在过去。它并不完美,但是对于非常长的字符串,它可以很好地工作,这些字符串中不需要换行符。

相邻的字符串文字自动连接成一个字符串开始,您就可以按照 PEP 8的建议,在括号内使用隐含的行继续:

print("Why, hello there wonderful "
"stackoverflow people!")

只是指出正是使用括号调用了自动连接。如果您碰巧已经在声明中使用了它们,那么没关系。否则,我将只使用’而不是插入括号(这是大多数 IDE 自动为您做的)。缩进应该对齐字符串延续,使其与 PEP8兼容。例如:

my_string = "The quick brown dog " \
"jumped over the lazy fox"

另一种可能性是使用文本包装模块。这也避免了问题中提到的“字符串只是坐在无所适从(电影)里”的问题。

import textwrap
mystr = """\
Why, hello there
wonderful stackoverfow people"""
print (textwrap.fill(textwrap.dedent(mystr)))

这是一个相当干净的方法:

myStr = ("firstPartOfMyString"+
"secondPartOfMyString"+
"thirdPartOfMyString")