从How can I fill out a Python string with spaces?开始,对右边的字符串填充字符的公认答案是使用^{
但是如果我们想将字符填充到左边的字符串中,我们可以使用str.rjust()
来填充这两个字符,我们可以使用str.center()
,例如
>>> s = 'foobar'
>>> s.ljust(len(s)+1) # pads one space to the right
'foobar '
>>> s.rjust(len(s)+1) # pads one space to the left
' foobar'
>>> s.center(len(s)+2) # pads one space to both left and right
' foobar '
但在后端,这真的比简单地这样做更有效吗?:
^{pr2}$是否str.center()
/str.ljust()
/str.rjust()
比' ' + s + ' '
更可读?
str
函数和' ' + s + ' '
在程序集级别执行不同的操作,如中所示:
>>> import dis
>>> dis.dis(lambda: ' ' + s + ' ')
1 0 LOAD_CONST 1 (' ')
3 LOAD_GLOBAL 0 (s)
6 BINARY_ADD
7 LOAD_CONST 1 (' ')
10 BINARY_ADD
11 RETURN_VALUE
>>> dis.dis(lambda: s.center(len(s)+2))
1 0 LOAD_GLOBAL 0 (s)
3 LOAD_ATTR 1 (center)
6 LOAD_GLOBAL 2 (len)
9 LOAD_GLOBAL 0 (s)
12 CALL_FUNCTION 1
15 LOAD_CONST 1 (2)
18 BINARY_ADD
19 CALL_FUNCTION 1
22 RETURN_VALUE
有没有其他方法可以做同样的事情,更像Python一样/更有效率?在
或者,这似乎节省了反汇编程序中的一个步骤:
>>> ' {} '.format(s)
' foobar '
>>> dis.dis(lambda: ' {} '.format(s))
1 0 LOAD_CONST 1 (' {} ')
3 LOAD_ATTR 0 (format)
6 LOAD_GLOBAL 1 (s)
9 CALL_FUNCTION 1
12 RETURN_VALUE
那么,节省拆卸器是提高效率吗?或者它和' ' + s + ' '
没有什么不同?在
这些函数(
str.ljust
,str.rjust
和str.center
)的目的不是在字符串的开始和/或结尾添加固定数量的字符,而是添加适当数量的字符,并且根据字符串的长度。在如果您只想添加固定数量的字符,则不会使用这些字符,因为它们不是为此而设计的(它会花费您读取字符串的长度),并且会丢失一些可读性。你可能会用你自己的建议:
' ' * num + s + ' ' * num
甚至,如果数字是固定的:
' ' + s + ' '
这是一种更容易阅读和理解的方法,也许也更容易计算。在
在某些列中打印垂直对齐的字符串时,将文本置于右侧或左侧以及居中,这才是真正的含义。要使这些对齐在整个列上都正确,您必须计算每个字符串的长度,以正确填充每个字符串:
根据我的Python 3.4环境,其反汇编为:
^{pr2}$因此,无论在汇编程序中填充一个字符串的效率有什么改进,如果我们至少垂直对齐两个字符串,让我们调用任何库或内置函数/方法。他们会快得多:-)
相关问题 更多 >
编程相关推荐