Python代码阅读(第87篇):字符串填充
Python 代码阅读合集介绍:为什么不推荐Python初学者直接看项目源码
本篇阅读的代码实现了使用指定字符在字符串两边填充至指定长度的功能。
本篇阅读的代码片段来自于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
函数接收一个字符串、指定长度和填充字符,返回填充后的字符串。如果原字符串的长度短于指定的长度,则用指定的字符在字符串的两边进行填充。
先看下代码中的两种单边填充的方法。
str.rjust(width[, fillchar])
右对齐函数返回长度为width
的字符串,原字符串在其中靠右对齐。使用指定的fillchar
填充空位(默认使用ASCII
空格符)。 如果width
小于等于len(s)
则返回原字符串的副本。
str.ljust(width[, fillchar])
左对齐函数返回长度为width
的字符串,原字符串在其中靠左对齐。使用指定的fillchar
填充空位(默认使用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
函数中先使用右对齐,并使用指定字符串填充左边的空位。再使用左对齐,并使用指定字符串填充右边的空位。这样就可以像上面最后一个例子一样在字符串两边进行填充。根据直觉,两边分别需要填充的长度,其实就是指定长度减去字符串长度的一半。
- 针对右对齐。
如果函数指定的长度小于字符串长度,那么(len(s) + length)/2 < len(s)
无需填充。
如果指定长度大于字符串长度,那么根据s.rjust(floor((len(s) + length)/2), char)
这段代码,需要填充的长度为(len(s) + length)/2 - len(s) = (length - len(s))/2
,也就是说左侧填充长度是指定长度减去字符串长度后的一半,符合函数要求。
- 针对左对齐。
在已经正确填充左侧之后,直接使用指定长度,填充字符串右侧。特别的,当指定的长度小于字符串长度时,不做填充。