alv*_*vas -5 python string performance padding justify
从如何填写带空格的Python字符串?,在右边填充字符到字符串的接受答案是使用str.ljust().
但是如果我们想在左边填充字符到字符串,我们可以使用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 '
Run Code Online (Sandbox Code Playgroud)
但是在后端,这真的比单纯这样做更有效吗?:
>>> ' ' + s + ' '
' foobar '
>>> ' '*10 + s + ' '*10 # pads ten spaces to both left and right
' foobar '
Run Code Online (Sandbox Code Playgroud)
是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
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以做同样的事情,这是更加pythonic /有效?
或者,这似乎在反汇编程序中省了一步:
>>> ' {} '.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
Run Code Online (Sandbox Code Playgroud)
那么反汇编程序的节省是否提高了效率?或者它没有什么不同' ' + s + ' '?
这些函数(str.ljust,str.rjust和str.center)的目的不是为字符串的开始和/或结尾添加固定数量的字符,而是添加适当数量的字符串,具体取决于字符串的长度.
如果您只想添加固定数量的字符,则不会使用这些字符,因为它们不是为此而制作的(它会花费您读取字符串的长度)并且您将失去一些可读性.您可能会使用自己的建议:
' ' * num + s + ' ' * num
甚至,如果数字是固定的:
' ' + s + ' '
这更容易阅读和理解,也可能是计算.