python 定义函数为什么有个长线_关于格式化:如何在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))

似乎是个不错的选择。你不喜欢什么?

有点主观,不是吗?:)

相关:stackoverflow.com/questions/1940710/…(python中的字符串串联)

您可以通过删除"it's"中不正确的"it's"来保存字符。

我修正了我的语法错误。TY

indexes:index的正确复数形式为indices。

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

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

这与上面的相同技术有相同的问题,因为正确的代码与不正确的代码之间只有不可见的空白。

哪一个是"最好的"取决于你的特殊情况,但答案不仅仅是审美上的,而是一种微妙的不同行为。

cpython编译器尽可能优化文本操作,这意味着添加两个字符串文本只会在字节码中产生一个字符串文本。

虽然我收到的所有答案都很有帮助,但你的答案肯定能帮助我理解所有打破僵局的方法。结束的""行的问题是后面有空格吗?

我看不出这里的区别,但那主要是因为so的语法着色相当原始。(一些非常好的代码实际上是不可读的,但仅仅是因为它不在语法非常接近C的语言中。)让您的编辑器令人讨厌地突出显示尾随空格并不罕见,因为它们很少有用(或有意)。-)

@盖茨特——是的。你抓住了。当您选择文本时,它会显示出来。是的,好的文本编辑器/IDES可以帮助解决这个问题。

我有一次掉进了那个&40;白色空间)的流浪汉。可怕的经历。

如果文本本身包含引号,则不起作用。例如。

@khurshidalam您可以使用单引号'来包含该字符串,或者转义字符串中的双引号,或者使用三双引号"""。包含引号的带引号字符串的问题与使用单行或多行定义文本字符串的问题相同。

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

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限制是过去的事情。

这不是过去的事。python标准库仍然使用pep8作为它的风格指南,所以这个规则仍然存在,并且很多人(包括我自己)都遵循它。这是一个方便画线的地方。

我想知道有多少项目仍然遵循80个字符的规则。对于我使用的平均窗口大小,我认为100-120比80个字符更有效率。

是的,不过我也用了这个长度的线[恐怖!亵渎神灵!]我使用比例字体,所以精确的行长并不是那么重要。它更多的是一个例子,一行中有多少逻辑是可读的,而不是有多少字符,例如…如果我有一长串没人需要读的数据,我很乐意让它溢出120。

比例字体的代码-我和你在一起,兄弟。从我曾经和他们共事过的所有人对他们的厌恶来看,世界还没有准备好。

@波宾斯:你为什么用比例字体?优势是什么?

@格雷格:这和为什么在其他类型的文本中使用比例字体一样:可读性。当然,您需要选择一种具有良好特征的字体,比如1/L/O/0区分,但单空间字体也是如此。

大约80个字符还可以更容易地在同一屏幕上并排区分2个文件。另外,如果您在服务器控制台上的紧急情况下调试某些东西,您会非常感激80个字符的限制!:)

如果我要解决合并冲突,那80个字符很快就会变成240个字符的行(+滚动条,+行号,+差异标记)。即使我有足够的屏幕空间将其扩展到300个字符或更多,它也会使窗口变得非常巨大。

fwiw在我的浏览器中,你的段落的第一行是"一般来说,我不会费太大的力气让代码完全适合80列的行。它是"。"一共103个字符。

可以使用textwarp模块将其拆分为多行

import textwrap

str="ABCDEFGHIJKLIMNO"

print("

".join(textwrap.wrap(str,8)))

ABCDEFGH

IJKLIMNO

从文档中:

textwrap.wrap(text[, width[, ...]])

Wraps the single paragraph in text (a string) so every line is at most width characters long. Returns a list of output lines, without final newlines.

Optional keyword arguments correspond to the instance attributes of TextWrapper, documented below. width defaults to 70.

See the TextWrapper.wrap() method for additional details on how wrap() behaves.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值