textwrap.wrap() 和 textwrap.fill() 在 python 2 中如何工作?

PyA*_*ndy 8 python python-2.7

>>> import textwrap
>>> string = "This is a very very very very very long string."
>>> print textwrap.wrap(string,8)
>>> print textwrap.fill(string,8)
Run Code Online (Sandbox Code Playgroud)

输出:

['这是','非常','非常','非常','非常','非常','长','字符串。']

这是

一个非常

非常

非常

非常

非常

长的

细绳。

我知道 textwrap.wrap() 给了我一个列表,而 textwrap.fill 给了我一个字符串。在文档中,它说:“将单个段落包装在文本(字符串)中,因此每行最多为宽度字符长”。

但我不明白为什么 textwrap.wrap(), 8 形成的列表中每个元素的长度不是 8(如果 8 作为宽度参数传递)。为什么有时是 7,6 等。

同样,我不明白为什么在 textwrap.fill() 的情况下,每行的长度 = 8 个字符(如果宽度传递为 8 或 5,如果宽度传递为 5)。例如,有时是 7、6、4 等。为什么不完全等于宽度。因为它说每行最多应该是宽度字符长,所以如果 with 作为 8 传递,为什么它会在使用行中所有可用的 8 个字符之前中断?

不应该是像下面这样吗:

>>> import textwrap
>>> string = "This is a very very very very very long string."
>>> print textwrap.fill(string,8)
Run Code Online (Sandbox Code Playgroud)

输出:

这是

非常v

非常非常

非常非常

瑞朗

细绳。

abc*_*ccd 6

正如文档所述:

将单个段落包装在文本(字符串)中,因此每行的长度最多为 width 个字符。返回输出行列表,没有最终换行符。

textwrap 仅在分词处(通常在空格处)分割单词,并确保每个字符串不会超出宽度限制。注意:它不会在每个宽度字符处分割。

它用于将字符串拆分为多个部分,每个部分的最大可能数量的单词等于或小于宽度字符长,同时不破坏任何单词。