我怎样才能在 Python 中分解这条长线?

新手上路,请多包涵

你会如何格式化像这样的长行?我想让它的宽度不超过 80 个字符:

 logger.info("Skipping {0} because its thumbnail was already in our system as {1}.".format(line[indexes['url']], video.title))

这是我最好的选择吗?

 url = "Skipping {0} because its thumbnail was already in our system as {1}."
logger.info(url.format(line[indexes['url']], video.title))

原文由 Gattster 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 433
2 个回答

这是一个开始。在使用它们的代码之外定义较长的字符串并不是一个坏习惯。这是一种分离数据和行为的方法。您的第一个选择是通过使字符串文字彼此相邻来隐式地将它们连接在一起:

 ("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."""

这与上面的相同技术有相同的问题,因为正确的代码与不正确的代码仅通过不可见的空格不同。

哪一个是“最好的”取决于你的具体情况,但答案不仅仅是审美,而是一种微妙的不同行为。

原文由 jcdyer 发布,翻译遵循 CC BY-SA 4.0 许可协议

连续的字符串文字由编译器连接,括号中的表达式被认为是一行代码:

 logger.info("Skipping {0} because it's thumbnail was "
  "already in our system as {1}.".format(line[indexes['url']],
  video.title))

原文由 Ignacio Vazquez-Abrams 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏