我如何分解Python中的这一长串?

你将如何去格式化一个这样的长线? 我想要它不超过80个字符宽:

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

这是我最好的select吗?

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

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

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

看到不同? 没有? 那么当你的代码也不会。

隐式连接的缺点是它只能使用string文字,而不能从variables中获取string,所以当你重构时,事情会变得多毛。 此外,只能在组合string上插入格式。

或者,您可以使用连接运算符( + )显式连接:

 ("This is the first line of my text, " + "which will be joined to a second.") 

显式比隐式更好,就像python的禅宗所说的那样,但是这会创build三个string而不是一个,并且使用两倍的内存:有两个是你写的,另外两个是连在一起的,所以你必须知道什么时候忽视禅宗。 好处是您可以将格式化应用到每行上的任何子string,或者从括号外的整个string中进行格式化。

最后,你可以使用三重引号的string:

 """This is the first line of my text which will be joined to a second.""" 

这通常是我最喜欢的,尽pipe它的行为稍微有点不同,因为换行符和后续行中的任何前导空格都会显示在最后一个string中。 你可以用一个转义的反斜杠来消除换行符。

 """This is the first line of my text \ which will be joined to a second.""" 

这与上面相同的技术具有相同的问题,因为正确的代码只是由不可见的空白区分不正确的代码。

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

连续的string文字由编译器连接,括号expression式被认为是一行代码:

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

我个人不喜欢挂开块,所以我格式化为:

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

一般来说,我不会费太费力地使代码完全符合80列的内容。 值得把线路长度降低到合理的水平,但80强的限制已成为过去。