Von How can I fill out a Python string with spaces?, die akzeptierte Antwort auf Pad-Zeichen zu Zeichenfolge auf der rechten Seite ist die Verwendung der str.ljust()
.Effizienz und Pythonie von Füllraum (e) für die Zeichenfolge in Python
Aber wenn wir Zeichen auf links auffüllen wollen, können wir verwenden str.rjust()
und auf beide auffüllen können wir str.center()
, z.
>>> 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 '
Aber auf dem Back-End, ist dass wirklich effizienter als dies einfach tun?:
>>> ' ' + s + ' '
' foobar '
>>> ' '*10 + s + ' '*10 # pads ten spaces to both left and right
' foobar '
Ist str.center()
/str.ljust()
/str.rjust()
besser lesbar als die ' ' + s + ' '
?
Die str
Funktionen und die ' ' + s + ' '
die andere Sache auf Baugruppenebene zu tun, wie in gezeigt:
>>> 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
andere Methoden gibt es die gleiche Sache zu tun, das ist/sind mehr pythonic/leistungsfähig?
EDITED
Alternativ scheint dies einen Schritt in den Disassembler zu speichern:
>>> ' {} '.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
So ist die Einsparung in dem Disassembler eine Verbesserung der Effizienz? Oder unterscheidet es sich nicht von der ' ' + s + ' '
?
Sie verwenden 'dis.dis' nicht korrekt:' dis.dis (lambda: '' + s + '') '. –
@AshwiniChaudhary, Danke für den Tipp, yeah 'dis.dis' nimmt Funktionen anstelle von Anweisungen =) – alvas
Sie können' timeit' verwenden, um den Unterschied zu überprüfen, auf meinem Computer ''+ s +' '' ist zweimal schneller als 'center' oder' r/ljust'. – Holt