python3输出格式化

前言

在写Python的二级题时发现了一个严重的问题,写了半年多的Python居然不会字符串输出的格式化。好在刷了几套二级题,不然上考场可能得傻眼了。之后查官方的文档找到了相应的内容,但是想在那么长的文档不好找,于是在这里将其总结

我目前已知的有三套格式化的方法:
一个是 "%" %()
另外一个是 "{}".format()
还可以 f"{}"
他们虽然形式不太一样,但是所用的规则都是一样的。这里先讲规则,然后在分开给出实例

规则

align

符号意义
‘<’左对齐(默认)
‘>’右对齐
‘=’将填充物放入符号(如果有的话)和数字之间
‘^’居中

这里面一时间看过去不好理解的是 ‘=’ ,可以举个例子

print("{:0=+10}".format(2))

#=====run=====
+000000002

sign

符号意义
‘+’表示标志应该用于正数和负数
‘-’表示标志应仅用于负数(这是默认行为)
’ ’表示应在正数上使用前导空格,在负数上使用减号。

这个不太理解啥意思,可以看例子

print("{:+}".format(2))
print("{:-}".format(2))
print("{: }".format(2))
print("{:+}".format(-2))
print("{:-}".format(-2))
print("{: }".format(-2))

#=====run=====
+2
2
 2
-2
-2
-2

type

这里应该先提到的是None,也就是里面什么都没有。在这种情况下python会自动判断括号内的数据类型,然后直接输出。但是需要注意的是只有str.format() 与 f有效
例子

a = 123
b = "abc"
c = 123.321

print("{} {} {}".format(a, b, c))
print(f"{a} {b} {c}")
print("% % % ", %(a, b, c))

#=====run=====
123 abc 123.321
123 abc 123.321
# 错误
类型(整数)说明
‘b’二进制格式。 输出以 2 为基数的数字。
‘c’字符。在打印之前将整数转换为相应的unicode字符。
‘d’十进制整数。 输出以 10 为基数的数字。
‘o’八进制格式。 输出以 8 为基数的数字。
‘x’十六进制格式。 输出以 16 为基数的数字,使用小写字母表示 9 以上的数码。
‘X’十六进制格式。 输出以 16 为基数的数字,使用大写字母表示 9 以上的数码。
类型(浮点数)说明
‘e’指数表示。 以使用字母 ‘e’ 来标示指数的科学计数法打印数字。 默认的精度为 6。
‘E’指数表示。 与 ‘e’ 相似,不同之处在于它使用大写字母 ‘E’ 作为分隔字符。
‘f’定点表示。 将数字显示为一个定点数。 默认的精确度为 6。
‘F’定点表示。 与 ‘f’ 相似,但会将 nan 转为 NAN 并将 inf 转为 INF。
‘g’常规格式。 对于给定的精度 p >= 1,这会将数值舍入到 p 位有效数字,再将结果以定点格式或科学计数法进行格式化,具体取决于其值的大小。准确的规则如下:假设使用表示类型 ‘e’ 和精度 p-1 进行格式化的结果具有指数值 exp。 那么如果 m <= exp < p,其中 m 以 -4 表示浮点值而以 -6 表示 Decimal 值,该数字将使用类型 ‘f’ 和精度 p-1-exp 进行格式化。 否则的话,该数字将使用表示类型 ‘e’ 和精度 p-1 进行格式化。 在两种情况下,都会从有效数字中移除无意义的末尾零,如果小数点之后没有余下数字则小数点也会被移除,除非使用了 ‘#’ 选项。正负无穷,正负零和 nan 会分别被格式化为 inf, -inf, 0, -0 和 nan,无论精度如何设定。精度 0 会被视为等同于精度 1。 默认精度为 6。
‘G’常规格式。 类似于 ‘g’,不同之处在于当数值非常大时会切换为 ‘E’。 无穷与 NaN 也会表示为大写形式。
‘%’百分比。 将数字乘以 100 并显示为定点 (‘f’) 格式,后面带一个百分号。

对 ‘g’ 的说明

print("{:.2g}".format(2010))
print("{:.2g}".format(2010.06))
print("{:.3g}".format(2010.06))
print("{:.4g}".format(2010.06))
print("{:.5g}".format(2010.06))
print("{:.6g}".format(2010.06))
print("{:.7g}".format(2010.06))
print("{:#.7g}".format(2010.06))
#=====run=====
2e+03 ## .0被忽略 若加上'#'可显示
2.0e+03
2.01e+03
2010
2010.1 ## 四舍五入(注意5是舍去的)
2010.06
2010.06 ## 并不添加 0
2010.060 ## 添加了 0

注意:这里精度计算的是全部的位数
但是格式化 f 的精度计算的是小数点后的位数

说明:表格里被我忽略了 n ,因为文档里说明的特性我没有试出来

补充字符
符号说明
‘#’按照我的个人理解就是让输出完整
‘,’千位分隔符(10,000)
‘_’千位分隔符(10_000),注意其他进制中是每四个(0x17_4876_e800)

顺序

[[fill]align][sign][#][0][width][grouping_option][.precision][type]
名称说明
fill填充的字符(注意配合 ‘<’ ‘=’ ‘>’ 使用)
0看例子
width宽度(注意小数点也算一个宽度)
grouping_option千字符
.precision精度,注意配合type使用

例子

print("{:>5}".format(100))
print("{:>05}".format(100))
print("{:!>05}".format(100))

#=====run=====
  100
00100
!!100

这个位置的 0 十分的奇怪,暂时还没找到原因

各个实例

"{}".format()

这个内置函数有别于另外两个的是:format()里可以看成元组,花括号内可以对其下标。若里面的元素为列表等还可以取值
并且也可以输入字典,默认值
格式化时应该先输入 ‘:’ 再输入需要的格式化字符。并且下标应该在 ‘:’ 前面

例子

print("{1} {0}".format(1,2))

l = [1,2]
print("{0[1]} {0[0]}".format(l))

print("{1:.2f}".format(12, 12.215))

print("{b} {a}".format(a = 123, b = 321))

dic = {"a":123, "b":321}
print("{b} {a}".format(**dic))
#=====run=====
2 1
2 1
12.21 ## 注意5是舍去的
321 123
321 123

f"{}"

这里花括号内一般是填充变量或者算式,直接填数字和字符串没啥意义。
注意格式化应该在变量名之后,并且也是以 ‘:’ 开头。

a = 123.321
print(f"{a:.2f}")
print(f"{1+1}")

#=====run=====
123.32
2

"%s" %("Hello World")

这个和c语言挺像的了。但需要注意的是这里不可以用下标。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值