Home > Backend Development > Python Tutorial > 技巧 | 5000字超全解析Python三种格式化输出方式【% / format / f-string】

技巧 | 5000字超全解析Python三种格式化输出方式【% / format / f-string】

Release: 2023-08-10 14:54:21
forward
4031 people have browsed it
技巧 | 5000字超全解析Python三种格式化输出方式【% / format / f-string】

本期导读

在编程学习中,我们经常会遇到各式各样的格式化输出要求,比如保留多少位小数,设置输出宽度,字符串补齐等等,本期就为大家详细解析python中经常用到的三种格式化方式:%(占位符)/format/f-string,希望对你有所帮助。


技巧 | 5000字超全解析Python三种格式化输出方式【% / format / f-string】

准备工作:

  • %c: 格式化字符及其ASCII码

  • %s:格式化字符串(常用)

  • %d:格式化整数(常用)

  • %u:格式化无符号整型(常用)

  • %o:格式化无符号八进制数

  • %x:格式化无符号十六进制数(常用)

  • %X:格式化无符号十六进制数(大写)

  • %f:格式化浮点数字,可指定小数点后的精度(常用)

  • %e:用科学计数法格式化浮点数(常用)

  • %E:作用同%e,用科学计数法格式化浮点数

  • %g:%f和%e的简写

  • %G:%F 和 %E 的简写

  • %p:用十六进制数格式化变量的地址

  • %%:格式化百分号标记 

  • ^:格式化居中对齐(常用)

  • >式化右对齐(常用)

  • <式化左对齐(常用)

  • +:式化显示正负号(常用)



1. %(占位符)

声明三个变量:姓名(string)、年龄(int)、身高(float)

name = &#39;Python 当打之年&#39;
age = 99
height = 1.85
Copy after login


1.1 混合
整数(%d)、浮点数(%f)、字符串(%s)
print(&#39;我是:%s, 年龄:%d, 身高:%fm&#39; % (name,age,height))
# 我是:Python 当打之年, 年龄:99, 身高:1.850000m

print(&#39;我是:%s, 年龄:%d, 身高:%.2fm&#39; % (name,age,height))
# 我是:Python 当打之年, 年龄:99, 身高:1.85m
Copy after login

注意:浮点数默认精度为6,即小数点后6位。


1.2 进制数

输出十六进制、十进制、八进制数(比较常用):

%x --- hex 十六进制

%d --- dec 十进制

%o --- oct 八进制
print("age_hex = %x, age_dec = %d, age_oct = %o" %(age,age,age))
# age_hex = 63, age_dec = 99, age_oct = 143
Copy after login
如果需要输出二进制的话,可以使用python函数 bin()
print(bin(age)) # 0b1100011
Copy after login

1.3 宽度对齐精度填充
1.3.1 数值型(默认右对齐)
格式化输出圆周率(pi = 3.1415926):
pi = 3.1415926

print(&#39;%10.3f&#39; % pi) #       3.142
# 宽度为10,右对齐,保留3位小数点

print(&#39;%-10.10f&#39; % pi) # 3.1415926000
# 宽度为10,左对齐,保留小数点后10位(不足10位补0)
Copy after login

1.3.2 字符串
print( "%.10s " % name) # Python 当打之
# 输出10个字符,如果不足,输出全部

print ("%.*s" % (6,name)) # Python
# 左对齐,取6个字符

print ("%10.6s" % name) #       Python
# 右对齐,宽度为10,取6个字符
Copy after login

1.4 正负号

带符号输出,即正数(+),负数(-):

print(&#39;%+10.3f&#39; % pi) # 3.142
# 宽度为10,右对齐,保留3位小数点

a = -pi
print(&#39;%+-10.3f&#39; % a) # -3.142
# 宽度为10,左对齐,保留3位小数点
Copy after login


2. format格式化

Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
2.1 混合

2.1.1 不设置位置

不设置位置参数时,参数默认从0 开始编号,依次为0,1,2,3......:

print(&#39;我是:{}, 年龄:{}, 身高:{}m&#39;.format (name,age,height))
# 我是:Python 当打之年, 年龄:99, 身高:1.85m
Copy after login


2.1.2 设置位置

设置位置参数时,参数根据实际编号对应变量索引,注意{}中编号:

print(&#39;我是:{0}, 年龄:{1}, 身高:{2}m&#39;.format (name,age,height))
# 我是:Python 当打之年, 年龄:99, 身高:1.85m

print(&#39;我是:{0}, 年龄:{1}, 身高:{1}m&#39;.format (name,age,height))
# 我是:Python 当打之年, 年龄:99, 身高:99m

print(&#39;我是:{0}, 年龄:{2}, 身高:{1}m&#39;.format (name,age,height))
# 我是:Python 当打之年, 年龄:1.85, 身高:99m
Copy after login

2.1.3 单变量参数

可以将索引编号设置为关键字,关键字需要有相应赋值:

print(&#39;我是:{name}, 年龄:{age}, 身高:{height}m&#39;.format(name=&#39;Python 当打之年&#39;, age=99, height=1.85))
# 我是:Python 当打之年, 年龄:99, 身高:1.85m
Copy after login


2.1.4 列表参数

参数也可以是列表,注意多维列表需要指定为一维列表,'{0[0]}', '{0[1]}', '{0[2]}' 中'0'是必须的:

lst = [[&#39;Python 当打之年&#39;, 99, 1.85],[&#39;Python 当打之年&#39;, 18, 1.85]]

print(&#39;我是:{0[0]}, 年龄:{0[1]}, 身高:{0[2]}m&#39;.format(lst[0]))
# 我是:Python 当打之年, 年龄:99, 身高:1.85m

print(&#39;我是:{0[0]}, 年龄:{0[1]}, 身高:{0[2]}m&#39;.format(lst[1]))
# 我是:Python 当打之年, 年龄:18, 身高:1.85m
Copy after login

2.1.5 字典参数

当参数为字典时,可以使用关键字:

dic = {&#39;name&#39;:&#39;Python 当打之年&#39;,&#39;age&#39;:99,&#39;height&#39;:1.85}

print(&#39;我是:{name}, 年龄:{age}, 身高:{height}m&#39;.format(**dic))
# 我是:Python 当打之年, 年龄:99, 身高:1.85m
Copy after login

2.2 宽度对齐精度填充

宽度为10,居中、居右、居左对齐:

a = 66
print(&#39;{:^10d}&#39;.format(a)) # 宽度10,居中
print(&#39;{:>10d}&#39;.format(a)) # 宽度10,居右
print(&#39;{:<10d}&#39;.format(a)) # 宽度10,居左
#     66
#         66
# 66
Copy after login


保留2、3位有效数字,百分比以及指数计数法:

pi = 3.1415926
print("{:.2f}".format(pi)) # 不带符号
print("{:+.3f}".format(pi)) # 带符号
print("{:.4%}".format(pi)) # 百分比
print("{:.2e}".format(pi)) # 指数计数法
# 3.14
# +3.142
# 314.1593%
# 3.14e+00
Copy after login


可以使用不同字符进行填充(补齐):

print(&#39;{:0^10d}&#39;.format(a)) # 宽度10,居中
print(&#39;{:a>10d}&#39;.format(a)) # 宽度10,居右
print(&#39;{:0<10d}&#39;.format(a)) # 宽度10,居左
# 0000660000
# aaaaaaaa66
# 6600000000

print(&#39;{:0^30}&#39;.format(name)) # 宽度30,居中
print(&#39;{:0>30}&#39;.format(name)) # 宽度30,居右
print(&#39;{:0<30}&#39;.format(name)) # 宽度30,居左
# 000000000Python 当打之年0000000000
# 0000000000000000000Python 当打之年
# Python 当打之年0000000000000000000

print(&#39;Hello {0:>{1}} &#39;.format(name,20))
# Hello                    Python 当打之年
Copy after login


2.3 千位分隔符

主要用于货币数据格式化输出,用逗号表示,当然也可以用其他字符替代:
print(&#39;{:,}&#39;.format(100000000))
print(&#39;{:,}&#39;.format(1234567.1234567))
# 100,000,000
# 1,234,567.1234567

print(&#39;{0:-^20,}&#39;.format(1234567.1234567))
print(&#39;{0:->20,}&#39;.format(1234567.1234567))
print(&#39;{0:-<20,}&#39;.format(1234567.1234567))
# -1,234,567.1234567--
# ---1,234,567.1234567
# 1,234,567.1234567---
Copy after login



3. f-string格式化

f-string格式化是python3.6引入了一种新的字符串格式化方式。

3.1 单变量参数

变量名直接做参数,比如name, age, height,注意不需要单引号或双引号:

print(f&#39;我是:{name}, 年龄:{age}, 身高:{height}m&#39;)
# 我是:Python 当打之年, 年龄:99, 身高:1.85m
Copy after login


3.2 表达式参数

可以是直接的数值运算,也可以是变量赋值后运算:
print(f&#39;计算结果是:{2*5 + 3*4}&#39;)
# 计算结果是:22

a = 90
b = 9
print(f&#39;计算结果是:{a*b + a + b}&#39;)
# 计算结果是:909
Copy after login

3.3 函数参数

普通函数作为参数、lambda函数作为参数:

name = &#39;PYTHON当打之年&#39;
print(f&#39;我是:{name}&#39;)
print(f&#39;我是:{name.lower()}&#39;)
# 我是:PYTHON当打之年
# 我是:python当打之年

a = 90
b = 9
print(f&#39;计算结果是:{(lambda x,y:x+y)(a,b)}&#39;)
# 计算结果是:99
Copy after login

3.4 宽度对齐精度填充

宽度为10,精度为小数点后2、3、4位,居中、居右、居左对齐,填充方式和format一样可以选择不同的字符:

pi = 3.1415926

print(f&#39;{pi:^10.2f}&#39;)
print(f&#39;{pi:>10.3f}&#39;)
print(f&#39;{pi:<10.4f}&#39;)
#      3.14
#        3.142
# 3.1416

print(f&#39;{pi:a^10.2f}&#39;)
print(f&#39;{pi:a>10.3f}&#39;)
print(f&#39;{pi:a<10.4f}&#39;)
# aaa3.14aaa
# aaaaa3.142
# 3.1416aaaa
Copy after login

3.5 千位分隔符
主要用于货币数据格式化输出,用逗号表示,同样也可以用其他字符替代:
a = 1234567.1234567
print(f&#39;{a:,f}&#39;)
print(f&#39;{a:_f}&#39;)
# 1,234,567.123457
# 1_234_567.123457
Copy after login


总结:

%(占位符):
优点:在简单练习中,表达比较直观,易于掌握。
缺点:随着参数数量的增加,格式输入会逐渐变得繁琐。
format:
优点:可以根据编号设置单个参数多次输出,填充方式比较灵活。
缺点:随着参数数量的增加,输入长度会逐渐增加,当有大量参数时,同样比较繁琐。
f-string:
优点:格式化的方式较前两种更加直观,效率也较前两个高一些。

缺点:新的格式化方式,有些语句格式较前两中复杂一些。

上面三种格式化方式我们都可以使用,大家在学习过程中,可以根据自己的实际情况选择格式化方式,比较推荐f-string方式

The above is the detailed content of 技巧 | 5000字超全解析Python三种格式化输出方式【% / format / f-string】. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:Python当打之年
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template