От How can I fill out a Python string with spaces? принятым ответом на символ пробела в строке справа является использование str.ljust()
.Эффективность и питоничность пространства пробелов для строки в Python
Но если мы хотим, чтобы символ пэда в строку слева, мы можем использовать 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 '
Но на внутреннем интерфейсе, является то, что на самом деле более эффективно, чем просто делать это?:
>>> ' ' + s + ' '
' foobar '
>>> ' '*10 + s + ' '*10 # pads ten spaces to both left and right
' foobar '
ли 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
Существуют ли какие-либо другие методы, чтобы сделать то же самое, что является/более вещий/эффективным?
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
Так является экономия дизассемблера улучшения эффективности? Или это ничем не отличается от ' ' + s + ' '
?
Вы не используете 'dis.dis' правильно:' dis.dis (lambda: '' + s + '') '. –
@AshwiniChaudhary, спасибо за отзыв, yeah 'dis.dis' принимает функции вместо операторов =) – alvas
Вы можете использовать' timeit', чтобы проверить разницу, на моем компьютере '' '+ s +' ''в два раза быстрее, чем 'center' или' r/ljust'. – Holt