Python变量格式化输出实现原理解析


Posted in Python onAugust 06, 2020

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 = 1
print("我的学号是 %06d" % student_no)
# 我的学号是 000001

scale = 0.2
print("数据比例是 %.02f%%" % (scale * 100))
# 数据比例是 20.00%
指定最小输出宽度

当使用转换说明符时,可以使用下面的格式指定最小输出宽度(至少占用多少个字符的位置):

%10d 表示输出的整数宽度至少为 10
%20s 表示输出的字符串宽度至少为 20
n = 1234567
print("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,左边补0
print("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):000123456
n(+9): +123456
f(-+0):+140.500000
s(-10):Hello .

指定小数精度

对于小数(浮点数),print() 还允许指定小数点后的数字位数,也即指定小数的输出精度。

精度值需要放在最小宽度之后,中间用点号.隔开;也可以不写最小宽度,只写精度。具体格式如下:

%m.nf
%.nf

m 表示最小宽度,n 表示输出精度,. 是必须存在的。

请看下面的代码:

f = 3.141592653
# 最小宽度为8,小数点后保留3位
print("%8.3f" % f)
# 最小宽度为8,小数点后保留3位,左边补0
print("%08.3f" % f)
# 最小宽度为8,小数点后保留3位,左边补0,带符号
print("%+08.3f" % f)

运行结果:

3.142
0003.142
+003.142

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
2款Python内存检测工具介绍和使用方法
Jun 01 Python
在Python中处理字符串之isdigit()方法的使用
May 18 Python
Python文档生成工具pydoc使用介绍
Jun 02 Python
Python切片知识解析
Mar 06 Python
Python时间获取及转换知识汇总
Jan 11 Python
Python时间戳使用和相互转换详解
Dec 11 Python
Python编程pygame模块实现移动的小车示例代码
Jan 03 Python
django主动抛出403异常的方法详解
Jan 04 Python
python实现字符串和数字拼接
Mar 02 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
Feb 02 Python
pytorch 中nn.Dropout的使用说明
May 20 Python
python b站视频下载的五种版本
May 27 Python
Python实现Canny及Hough算法代码实例解析
Aug 06 #Python
vscode调试django项目的方法
Aug 06 #Python
Python如何使用input函数获取输入
Aug 06 #Python
Python map及filter函数使用方法解析
Aug 06 #Python
python学习笔记之多进程
Aug 06 #Python
Selenium alert 弹窗处理的示例代码
Aug 06 #Python
Python如何进行时间处理
Aug 06 #Python
You might like
PHP 文件上传全攻略
2010/04/28 PHP
CentOS6.5 编译安装lnmp环境
2014/12/21 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
Laravel 5.5 异常处理 & 错误日志的解决
2019/10/17 PHP
jquery封装的对话框简单实现
2013/07/21 Javascript
js获取时间(本周、本季度、本月..)
2013/11/22 Javascript
jQuery中click事件用法实例
2014/12/26 Javascript
jQuery中$.ajax()方法参数解析
2016/10/22 Javascript
详解vue-validator(vue验证器)
2017/01/16 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
vscode下vue项目中eslint的使用方法
2019/01/13 Javascript
jQuery中实现text()的方法
2019/04/04 jQuery
8个有意思的JavaScript面试题
2019/07/30 Javascript
小程序按钮避免多次调用接口和点击方案实现(不用showLoading)
2020/04/15 Javascript
基于javascript的无缝滚动动画实现2
2020/08/07 Javascript
[51:06]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS Liquid
2018/03/30 DOTA
浅谈python函数之作用域(python3.5)
2017/10/27 Python
Python2.7下安装Scrapy框架步骤教程
2017/12/22 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
2019/06/19 Python
Python实现手机号自动判断男女性别(实例解析)
2019/12/22 Python
Python如何截图保存的三种方法(小结)
2020/09/01 Python
python 将列表里的字典元素合并为一个字典实例
2020/09/01 Python
使用canvas绘制贝塞尔曲线
2014/12/17 HTML / CSS
英国排名第一的餐具品牌:Denby Pottery
2019/11/01 全球购物
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
托管代码(Managed Code)和非托管代码(Unmanaged Code)有什么区别
2014/09/29 面试题
入党积极分子思想汇报范文
2014/01/05 职场文书
体育专业学生自我评价范文
2014/01/17 职场文书
全神贯注教学反思
2014/02/03 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
党员学习新党章思想汇报
2014/10/25 职场文书
材料采购员岗位职责
2015/04/03 职场文书
民主生活会意见
2015/06/05 职场文书
环境卫生整治简报
2015/07/20 职场文书
MySQL8.0.24版本Release Note的一些改进点
2021/04/22 MySQL
python实现简单的井字棋
2021/05/26 Python