Python语法中,有一种使用%来格式化字符串的用法。这种用法,很像C语言的sprintf函数,很多参数的含义都是一样的。
我们先来举个例子,看看基本语法格式:
>>> domain = 'https://www.pynote.net'
>>> str = 'website domain is %s' % domain
>>> str
'website domain is https://www.pynote.net'
>>>
>>> str2 = 'I built %s %d days\' ago' % (domain, 100)
>>> str2
"I built https://www.pynote.net 100 days' ago"
基本语法是,在待格式化的字符串中有以%所表示的引用,而引用的具体内容,来自字符串后面的那个%符号后面的变量。如果待格式化的字符串中有多个%所表示的引用,字符串后面%后面,就是一个tuple,里面按引用顺序排列各变量。
格式化%s
%s表示一个字符串,将后面对应位置的变量插入%s的位置。这可能是最简单的%格式化了。
>>> ss = 'abc'
>>> str = 'this %s is %s, so %s.' % (ss,ss,ss)
>>> str
'this abc is abc, so abc.'
格式化%d
%d表示这里应该插入一个数字。
>>> dd = 123
>>> str = '%d' % dd
>>> str
'123'
>>> str = '%+d' % dd
>>> str
'+123'
>>> str = '%10d' % dd
>>> str
' 123'
>>> str = '%010d' % dd
>>> str
'0000000123'
>>> str = '%-10d' % dd
>>> str
'123 '
上面的代码显示了%d有一些额外的可使用的符号,用来控制把一个数字格式化如字符串后的显示效果。这些符号不言自明,不需要另外的解释了吧。。。
格式化%x和%X
%x表示将数字按照十六进制插入字符串,%X表示十六进制中的字母大写。
>>> dd
123
>>> str = '%x' % dd
>>> str
'7b'
>>> str = '0x%X' % dd
>>> str
'0x7B'
>>> str = '0x%4X' % dd
>>> str
'0x 7B'
>>> str = '0x%04X' % dd
>>> str
'0x007B'
>>> '%#x' % 32 # # used to add 0x prefix automatically
'0x20'
我个人比较喜欢用%X,十六进制字母大写看起来更酷一点...:)
格式化%f
%f表示对一个浮点数进行字符串格式化。
>>> ff = 1.23456789
>>> str = '%f' % ff
>>> str
'1.234568'
>>> str = '%.4f' % ff # control how long after the dot
>>> str
'1.2346'
>>> '%15f'%ff # just like %f only with specific width
' 1.234568'
>>> '%-15f'%ff
'1.234568 '
>>> '%015f'%ff
'00000001.234568'
>>> '%15.2f'%ff # width.fraction number
' 1.23'
上面将浮点数格式化为字符串,看起来好像是在做四舍五入,其实不是哦,关于Python实现四舍五入的详细情况,请参考这篇文章:Python实现小数四舍五入的方法。
证明%f没有四舍五入的功能:
>>> ff = 2.675
>>> '%.2f' % ff
'2.67'
格式化%e和%E
%e和%E是一样的,都是将数字转换按照科学计数的方式表示的字符串。
>>> num = 12345678987654321
>>> '%e' % num
'1.234568e+16'
>>> '%20E' % num
' 1.234568E+16'
>>> '%-20e' % num
'1.234568e+16 '
格式化%c
%c表示将一个数字转化成对应的unicode字符。
>>> '%c' % 69
'E'
>>> '%c' % 70
'F'
>>> '%c' % 71
'G'
>>> '%c' % 23456
'宠'
>>> '%c' % 23457
'审'
格式化%o
%o表示将一个数组格式化成八进制表示。
>>> '%o' % 8
'10'
>>> '%o' % 16
'20'
>>> '%o' % 32
'40'
>>> '%10o' % 32
' 40'
>>> '%-10o' % 32
'40 '
>>> '%#o' % 32 # # used to add 0o prefix automatically
'0o40'
注意#这个小符号,如果是十六进制,它自动加0x,如果是八进制,它自动加0o。
好了,基本上常用的格式化符号都在上面了,如果后面遇到这里没有的,再加上去。以上就是用%格式化Python字符串的总结。Python程序使用%格式化字符串, 版本兼容性最好(f-string格式化的方式,要Python3.6开始才会有)。
-- EOF --