Python变量格式化输出实现原理解析
print() 函数使用以 % 开头的转换说明符对各种类型的数据进行格式化输出。
转换说明符(Conversion Specifier)只是一个占位符(也称为格式化操作符),它会被后面表达式(变量、常量、数字、字符串、加减乘除等各种形式)的值代替。
转换说明符 解释 %d、%i 转换为带符号的十进制整数 %o 转换为带符号的八进制整数 %x、%X 转换为带符号的十六进制整数 %e 转化为科学计数法表示的浮点数(e 小写) %E 转化为科学计数法表示的浮点数(E 大写) %f、%F 转化为十进制浮点数 %g 智能选择使用 %f 或 %e 格式 %G 智能选择使用 %F 或 %E 格式 %c 格式化字符及其 ASCII 码 %r 使用 repr() 函数将表达式转换为字符串 %s 使用 str() 函数将表达式转换为字符串 %% 输出%
在 print() 函数中,由引号包围的是格式化字符串,它相当于一个字符串模板,可以放置一些转换说明符(占位符)。
中间的%是一个分隔符,它前面是格式化字符串,后面是要输出的表达式。
当然,格式化字符串中也可以包含多个转换说明符,这个时候也得提供多个表达式,用以替换对应的转换说明符,多个表达式必须使用小括号( )包围起来。
举例
name = ’小明’print('我的名字叫 %s,请多多关照!' % name) # 我的名字叫 小明,请多多关照!
student_no = 1print('我的学号是 %06d' % student_no)# 我的学号是 000001
scale = 0.2print('数据比例是 %.02f%%' % (scale * 100))# 数据比例是 20.00%指定最小输出宽度
当使用转换说明符时,可以使用下面的格式指定最小输出宽度(至少占用多少个字符的位置):
%10d 表示输出的整数宽度至少为 10%20s 表示输出的字符串宽度至少为 20n = 1234567print('n(10):%10d.' % n)print('n(5):%5d.' % n)url = 'https://www.baidu.com/python/'print('url(35):%35s.' % url)print('url(20):%20s.' % url)
执行结果为:
n(10): 1234567.n(5):1234567.url(35): https://www.baidu.com/python/.url(20):https://www.baidu.com/python/.
从执行结果可以发现,对于整数和字符串,当数据的实际宽度小于指定宽度时,会在左侧以空格补齐;当数据的实际宽度大于指定宽度时,会按照数据的实际宽度输出。
指定对齐方式
默认情况下,print() 输出的数据总是右对齐的。
当数据不够宽时,数据总是靠右边输出,而在左边补充空格以达到指定的宽度。
Python 允许在最小宽度之前增加一个标志来改变对齐方式,Python支持的标志如下。
标志 说明 - 指定左对齐 + 表示输出的数字总要带着符号;整数带+,负数带-。 0 表示宽度不足时补充 0,而不是补充空格。
几点说明:
对于整数,指定左对齐时,在右边补0是没有效果的,因为这样会改变整数的值。 对于小数,以上三个标志可以同时存在。 对于字符串,只能使用-标志,因为符号对于字符串没有意义,而补 0 会改变字符串的值。例子:
n = 123456# %09d 表示最小宽度为9,左边补0print('n(09):%09d' % n)# %+9d 表示最小宽度为9,带上符号print('n(+9):%+9d' % n)f = 140.5# %-+010f 表示最小宽度为10,左对齐,带上符号print('f(-+0):%-+010f' % f)s = 'Hello'# %-10s 表示最小宽度为10,左对齐print('s(-10):%-10s.' % s)
执行结果
n(09):000123456n(+9): +123456f(-+0):+140.500000s(-10):Hello .
指定小数精度
对于小数(浮点数),print() 还允许指定小数点后的数字位数,也即指定小数的输出精度。
精度值需要放在最小宽度之后,中间用点号.隔开;也可以不写最小宽度,只写精度。具体格式如下:
%m.nf%.nf
m 表示最小宽度,n 表示输出精度,. 是必须存在的。
请看下面的代码:
f = 3.141592653# 最小宽度为8,小数点后保留3位print('%8.3f' % f)# 最小宽度为8,小数点后保留3位,左边补0print('%08.3f' % f)# 最小宽度为8,小数点后保留3位,左边补0,带符号print('%+08.3f' % f)
运行结果:
3.1420003.142+003.142
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持好吧啦网。
相关文章: