Python 代碼閱讀合集介紹:為什么不推薦Python初學(xué)者直接看項(xiàng)目源碼
本篇閱讀的代碼實(shí)現(xiàn)了使用指定字符在字符串兩邊填充至指定長度的功能。
本篇閱讀的代碼片段來自于30-seconds-of-python凯沪。
pad
from math import floor
def pad(s, length, char = ' '):
return s.rjust(floor((len(s) + length)/2), char).ljust(length, char)
# EXAMPLES
print(pad('cat', 8)) # ' cat '
print(pad('42', 6, '0')) # '004200'
print(pad('foobar', 3)) # 'foobar'
pad
函數(shù)接收一個(gè)字符串吐绵、指定長度和填充字符鸭轮,返回填充后的字符串裳仆。如果原字符串的長度短于指定的長度妇菱,則用指定的字符在字符串的兩邊進(jìn)行填充务荆。
先看下代碼中的兩種單邊填充的方法祖今。
str.rjust(width[, fillchar])
右對齊函數(shù)返回長度為width
的字符串校坑,原字符串在其中靠右對齊。使用指定的fillchar
填充空位(默認(rèn)使用ASCII
空格符)千诬。 如果width
小于等于len(s)
則返回原字符串的副本耍目。
str.ljust(width[, fillchar])
左對齊函數(shù)返回長度為width
的字符串,原字符串在其中靠左對齊徐绑。使用指定的fillchar
填充空位(默認(rèn)使用ASCII
空格符)邪驮。 如果width
小于等于len(s)
則返回原字符串的副本。
>>> s.rjust(6, '#')
'###123'
>>> s.ljust(9, '#')
'123######'
>>> s.rjust(6, '#')
'###123'
>>> s.ljust(6, '#')
'123###'
>>> s.rjust(6, '#').ljust(9, '#')
'###123###'
在pad
函數(shù)中先使用右對齊泵三,并使用指定字符串填充左邊的空位耕捞。再使用左對齊,并使用指定字符串填充右邊的空位烫幕。這樣就可以像上面最后一個(gè)例子一樣在字符串兩邊進(jìn)行填充俺抽。根據(jù)直覺,兩邊分別需要填充的長度较曼,其實(shí)就是指定長度減去字符串長度的一半磷斧。
- 針對右對齊。
如果函數(shù)指定的長度小于字符串長度,那么(len(s) + length)/2 < len(s)
無需填充弛饭。
如果指定長度大于字符串長度冕末,那么根據(jù)s.rjust(floor((len(s) + length)/2), char)
這段代碼,需要填充的長度為(len(s) + length)/2 - len(s) = (length - len(s))/2
侣颂,也就是說左側(cè)填充長度是指定長度減去字符串長度后的一半档桃,符合函數(shù)要求。
- 針對左對齊憔晒。
在已經(jīng)正確填充左側(cè)之后藻肄,直接使用指定長度,填充字符串右側(cè)拒担。特別的嘹屯,當(dāng)指定的長度小于字符串長度時(shí),不做填充从撼。