Python 如何字符串格式化使用_format格式化_详解码404

简介


本文中介绍的字符串一个非常重要的知识点:字符串格式化输出。
格式化怎么理解?简答来说:就是让字符串按照我们设定的格式来输出,达到我们想要的结果。主要是有4种方式:

  • %:基于占位符的格式化
  • format()函数的格式化:重点掌握
  • f-string格式化:重点掌握
  • 字符串模板函数

format格式化


python2.6+开始,新增了一种格式化字符串的函数str.format,可以说极大地增强了字符串格式化的功能,基本语法是通过{}和:来代替占位符%

  • 接收多个不限制的参数
  • 位置可以不按照顺序

语法形式


{<参数序号>:<格式控制标记>},中间有一个冒号,不能省略!!!

name = "Yule Cottage"  # 字符串类型
age = 25  # 整数类型
height = 1.76   # 浮点数类型
sex = "男"

多个参数连用


# 1、不设置位置
print("名字是:{},年龄是:{},身高是:{},性别:{}".format(name,age,height,sex))
名字是:Yule Cottage,年龄是:25,身高是:1.76,性别:男
# 2、设置位置参数

print("名字是:{0},年龄是:{1},身高是:{2},性别:{3}".format(name,age,height,sex))
名字是:Yule Cottage,年龄是:25,身高是:1.76,性别:男
# 设置位置参数
# 索引从0开始;2号位对应的height

print("名字是:{0},身高是:{2},年龄是:{1},性别:{3}".format(name,age,height,sex))
名字是:Yule Cottage,身高是:1.76,年龄是:25,性别:男
print("性别:{3},身高是:{2},名字是:{0},年龄是:{1}".format(name,age,height,sex))
性别:男,身高是:1.76,名字是:Yule Cottage,年龄是:25
# 3、元组形式
# 使用*进行解析

information = ("Peter",25)

print("姓名是:{},年龄是:{}".format(*information))
姓名是:Peter,年龄是:25
# 4、字典形式
# 参数为字典时候,通过**进行解析配对

print("名字是:{name},年龄是:{age},身高是:{height},性别:{sex}".format(**{"name":name,"age":age,"height":height,"sex":sex}))
名字是:Yule Cottage,年龄是:25,身高是:1.76,性别:男
# 5、直接变量赋值

print("名字是:{name},年龄是:{age},身高是:{height},性别:{sex}".format(name="Yule Cottage",age="2岁",height="1.75m",sex="男"))
名字是:Yule Cottage,年龄是:2岁,身高是:1.75m,性别:男

对齐


宽度为20,我们实现居中、靠左、靠右对齐

name
'Yule Cottage'
print("{:^20s}".format(name))  # 居中
print("{:>20s}".format(name))  # 靠右
print("{:<20s}".format(name))  # 靠左
    Yule Cottage    
        Yule Cottage
Yule Cottage

数值多种形式


首先我们还是看看对齐问题,浮点数的对齐只保留6位小数:

pi = 3.1415926

print("{:^20f}".format(pi))  # 居中  # 默认只保留6位小数
print("{:>20f}".format(pi))  # 靠右
print("{:<20f}".format(pi))  # 靠左
      3.141593      
            3.141593
3.141593

看看不同情况下的输出格式,浮点数需要带上小数点,默认全部是左对齐:

# 不同的输出方式

print("{}".format(pi))  # 原数据
print("{:.2f}".format(pi))   # 2位小数
print("{:>.10f}".format(pi))  # 位数不足,右侧补0
print("{:.4%}".format(pi))  # 百分比输出
print("{:.2e}".format(pi))
3.1415926
3.14
3.1415926000
314.1593%
3.14e+00

填充


sex
'男'
print("{0:30}".format(sex))  # 字符串默认左对齐
print("{:>30}".format(sex))  # 改成右对齐
print("{0:30}".format(age))  # 数值类型默认右对齐
print("{:<30}".format(height)) # 改成左对齐
男                             
                             男
                            25
1.76
# 指定填充的字符

print("{:*>30}".format(sex))  # *
print("{:+>30}".format(sex))  # +
print("{:+^30}".format(sex))  # 居中后填充+
print("{:+<30}".format(height)) # +
*****************************男
+++++++++++++++++++++++++++++男
++++++++++++++男+++++++++++++++
1.76++++++++++++++++++++++++++

千位分隔符


主要是用来显示数字的千位分隔符,在货币金额中使用的比较多:

b = 1003005000600

print("{:-^20}".format(b))   # 不用逗号
print("{:-^20,}".format(b))  # 用逗号
---1003005000600----
-1,003,005,000,600--
# 小数的千位分隔符显示

print("{0:-20,}".format(12567.98760))  # 不填充
print("{0:-^20,}".format(12567.98760))  # 居中+填充
print("{0:->20,}".format(12567.98760))  # 右对齐+填充
print("{0:-<20,}".format(12567.98760))  # 左对齐+填充
         12,567.9876
----12,567.9876-----
---------12,567.9876
12,567.9876---------

精度


精度输出的时候前面必须有一个小数点开头,具有两层含义:

  • 浮点数:表示输出小数位的有效位数
  • 字符串:精度表示输出的最大长度
pi
3.1415926
"{:.3f}".format(pi)
'3.142'
"{:30.5f}".format(pi)  # 小数点后5位,整体宽度30
'                       3.14159'
"{:*^30.5f}".format(pi)  # 小数点后5位,宽度30,居中后补充*
'***********3.14159************'
name
'Yule Cottage'
"{:.4}".format(name)  # 最大长度为4
'Yule'
"{:.6}".format(name)  # 输出最大长度为6
'Yule C'

多种输出类型


表示输出整数和浮点数类型的格式规则。对于整数类型,输出格式包括6 种:

  • c: 输出整数对应的 Unicode 字符;
  • b: 输出整数的二进制方式;
  • o: 输出整数的八进制方式;
  • d: 输出整数的十进制方式;
  • x: 输出整数的小写十六进制方式;
  • X: 输出整数的大写十六进制方式;

下面的例子表示的是365的二进制、Unicode字符、十进制、小写16进制和大写的16进制的不同输出格式:

"{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(365)
'101101101,ŭ,365,555,16d,16D'

如果是浮点数类型,那么输出格式包括4种:

  • e: 输出浮点数对应的小写字母 e 的指数形式;
  • E: 输出浮点数对应的大写字母 E 的指数形式;
  • f: 输出浮点数的标准浮点形式;
  • %: 输出浮点数的百分形式。

浮点数输出时尽量使用<.精度>表示小数部分的宽度,有助于更好控制输出格式。

"{0:e},{0:E}".format(3.1415)
'3.141500e+00,3.141500E+00'
"{0:f},{0:F}".format(3.1415)
'3.141500,3.141500'
"{0:%}".format(3.1415)  # 保留6位小数,百分比输出
'314.150000%'
"{0:.2%}".format(3.1415)  # 2位小数,百分比输出
'314.15%'

版权声明:本文为作者原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原创文章,作者:老C,如若转载,请注明出处:https://www.code404.icu/1082.html

发表评论

登录后才能评论