Python中字符串填充空间的效率和pythonicity

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 /有效?


EDITED

或者,这似乎在反汇编程序中省了一步:

>>> ' {} '.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 + ' '

Bri*_*ceP 6

这些函数(str.ljust,str.rjuststr.center)的目的不是为字符串的开始和/或结尾添加固定数量的字符,而是添加适当数量的字符串,具体取决于字符串的长度.

如果您只想添加固定数量的字符,则不会使用这些字符,因为它们不是为此而制作的(它会花费您读取字符串的长度)并且您将失去一些可读性.您可能会使用自己的建议:

' ' * num + s + ' ' * num

甚至,如果数字是固定的:

' ' + s + ' '

这更容易阅读和理解,也可能是计算.