Python格式化输出详解:print函数与%、format方法
本文详细介绍Python中的格式化输出技术。首先解析print函数的object、sep和end参数用法,接着对比C语言scanf,讲解%符号支持的%d、%f等格式控制及对齐补齐规则,最后深入探讨功能更强大的str.format()函数及其位置与命名匹配机制,帮助开发者掌握多种字符串格式化技巧。
Python的输出
在Python中,print()函数是进行输出的核心工具,直接调用即可使用。其完整语法结构为:
#最后面还有文件操作的,我们主要学习输出相关,所以暂不加入
print(object, sep=' ', end='\n')
object——代表需要输出的内容,可以是变量或具体数据,支持单个或多个对象。若输出多个对象,需使用逗号','进行分隔。
sep——用于指定多个输出对象之间的分隔符。若未显式设置,默认以空格作为分隔符。
end——用于定义输出结束时的结尾字符。若不特别设置,默认值为end='\n',即print()函数在输出完成后自动换行。
print(1,2,3,end='')
print(1,2,3,sep='!')
print(1,2,3,)
#它们的输出如下:
1 2 31!2!3
1 2 3
#请仔细思考为什么这样,理清楚头绪
在C语言中,scanf()函数用于格式化输入并可控制输出格式。那么在Python中如何实现类似的格式化输出呢?
int a=10;
float b=6.6;
scanf("%d%f\n",a,b);
上述C语言代码在Python中的实现方式如下:
a=10
b=6.6
print("%d%f"%(a,b))
#print(a,b,sep='')
若对输出数据的格式有特定要求,可采用上述方式,这与C语言中修改设定输出格式的方法类似。
若对输出格式无特殊要求,推荐使用第二种方法,操作更为简便。当需要将数据与字符串连接输出时,可使用+号进行拼接,但前提是输出类型也必须为字符串。若非字符串类型,需使用str()函数进行强制转换后再连接输出,示例如下:
a=18
print("Her age is "+a+" !")
上述写法存在错误,因为变量a被赋值为18,其数据类型为整型(int)。整型不能直接与字符串通过+号连接,因此正确的写法应为:
a=18
print("Her age is "+str(a)+" !")
#输出为:Her age is 18 !
接下来具体讲解格式化输出数据的方法,%符号的格式化输出与C语言大同小异:
%d——表示十进制整数
%o——表示八进制整数
%x——表示十六进制整数
%f——表示浮点数,小数点后保留六位有效数字
%e——表示指数形式输出,小数点后保留六位有效数字
%g——在六位有效数字的前提下,若使用小数方式合适则用小数,否则使用科学计数法
a=5
print(10)
print("%d"%a)
print("%2d"%a)#输出时按照2个空间大小输出,默认为右对齐
print("%-2d"%a)#2个空间大小,因为d前面是-号,所以左对齐
print("%02d"%a)#2个空间大小输出,不够的用0补齐
print("%-02d"%a)#2个空间大小输出,不够的用0补齐,左对齐
#以上代码的输出结果为: 10 5 5 5 05 5
总结上述代码,%与d之间可以添加数字或符号来控制输出数据的格式,具体规则如下:
%(控制左右对齐)(指定补齐字符)(指定输出宽度)d,各部分含义分别为:
默认为右对齐,若前缀为负号则表示左对齐
默认使用空格补齐,也可设置其他字符进行补齐
若数据本身长度超过指定宽度,则无影响;若数据长度不足,则根据左右对齐方式及补齐字符进行填充。简而言之,这是为了占据指定的显示位置。
其他数据类型的使用方式类似,无论是浮点数还是字符串。例如%5.2f表示占用五个位置,并保留两位小数。需特别注意,浮点数的小数点本身也占用一个位置。接下来通过几个实例仔细体会:
b=5.21
print(b)
print("%f"%b)
print("%2.1f"%b)
print("%2.2f"%b)
print("%5.2f"%b)
print("%5.5f"%b)
print("%.5f"%b)
#上面的输出依次为: 5.21 5.210000 5.2 5.21 5.21 5.21000 5.21000 #请大家注意对比研究
有些内容需要亲自实践体会才能牢记,希望大家能够勤奋思考,避免偷懒!
接下来介绍一个函数——str.format()
相较于基本格式化输出采用的'%'方法,format()功能更为强大。该函数将字符串视为模板,通过传入参数进行格式化,并使用大括号'{}'作为特殊字符替代'%'。
直接通过代码演示:
#通过位置匹配,类似于数组
print('{} {}'.format('hello','baibai'))#hello baibai
print('{1} {0}'.format('hello','baibai'))#baibai hello
print('{1} {1}'.format('hello','baibai'))#baibai baibai
print('{0} {0}{0}'.format('hello','baibai'))#hello hellohello
#通过对应值名字进行匹配,类似于字典
#(这里也可以传入一个字典类型进行key与value对应取)
print('{a},{b}'.format(a='1',b='8'))#1,8
除此之外,我们还可以输出更复杂的数据类型。
#还是用一下我之前定义的一个数据
goods=[(1,"百事可乐",10,3),(2,"康师傅方便面",15,2),(3,"马克杯",5,30)]
list=[1,2,3]
print('{0[1]}'.format(goods))#(2, '康师傅方便面', 15, 2)
print('{0[1]},{1[2]}'.format(goods,list))#(2, '康师傅方便面', 15, 2),3
print('{0[1][1]}'.format(goods,list))#康师傅方便面
总结
本篇文章到此结束,希望能够为大家带来帮助,也希望大家关注本站的更多内容!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









