11.Python字符串的格式化美颜 - 数据类型(四)

青少年、零基础、初学者Python编程从入门到精通,“老马带小马 一块学Python”编程系列

现在的很多应用软件,不管是PC上的软件还是智能终端上的APP,在UE(User Experience,即用户体验)及UI(User Interface,即用户界面)上大家都尤为重视,没有好的使用体验、没有好的用户界面,首先就给人留下粗糙、不好用的第一印象,直接影响到后续软件的推广和用户黏性,所以大家在程序设计及实现过程中要尤为重视UE体验和UI效果。软件的UI除了美图外,还有很多显示文字的地方,这些文字显示得是否整齐划一、是否有条理、格式化得是否恰当,直接反映着程序员的专业性。今天我们就给大家讲讲字符串的格式化美颜。

1. 旧式的格式化操作符%

x = '%-5s:%03d,%06.2f,%+.3f' % ('结果1',3,3.14159265,3.14159265)
y = '%5s:%3d,%6.2f,%+.3f' % ('结果2',400,50.333333,-99.171717)
print(x)
print(y)

上述程序的输出结果如下所示:

结果1  :003,003.14,+3.142
  结果2:400, 50.33,-99.172

因为“%”操作符属于旧式字符串格式化方式,容易出错且不够灵活,这种方式的使用应该会越来越少,所以仅对上述例子做个简单的说明,至少大家在学习或参考其他代码的时候能看得懂。

  • “%”前面为字符串;“%”后面为拟代入字符串的值(可为字符串类型、整型或浮点型等),若有多个值,相互之间用英文逗号隔开,并用小括号整体框起来,若仅一个值,则不需要括号;
  • 对于“%”前面的字符串,需要把占位符“%s”(对应拟代入的字符串)、“%d”(对应拟代入的整型)或者“%f”(对应拟代入的浮点型)插入在拟代入值的相应位置上,且应确保插入位置的顺序及个数,与后面拟代入值的顺序及个数完全一致,若拟代入的值的类型不确定或者比较复杂,直接用“%s”即可;
  • 对于字符串类型,“%-5s”中的“-”表示输出结果左对齐(默认都是右对齐),“5”表示显示的最小总空间为5个字符的宽度;
  • 对于整型,“%03d”中的“3”表示显示的最小总空间为3个字符的宽度,“0”表示在显示的数字前面用0补全(代替空格);
  • 对于浮点型,“06.2f”中的“6”同样代表显示的宽度,“0”表示用0代替空格,小数点后的“2”则代表显示的数值保留小数点后2位;对于“%+.3f”,则要求在正数前面显示加号,对整体的显示宽度则不做要求,按需分配。

2. str.format()的格式化方法

a = 'x={0:<+8.2f},y={1:>+10,d}'.format(3.14159265,-3141593)
print(a)

上述程序的输出结果如下所示:

x=+3.14   ,y=-3,141,593

如上述代码所示,采用字符串的format方法进行字符串的格式化。“.format”之前是待格式化的字符串,其中,大括号里面的称之为“替换字段”(或“占位符”),“.format”之后的括号里传递的是拟用于替代的参数值。重点说一下“替换字段”,其包括两部分(两部分根据需要都是可选的,即可有可无):

  • 英文冒号前的部分叫“字段名”(比如,上述代码中的“0”、“1”),用于匹配(或者说标识)将用format的哪个参数值进行替换;
  • 英文冒号后的部分叫“格式规格”(比如,上述代码中的“<+8.2f”、“>+10,”),用于格式化替换值的字符串展现,要是没有“格式规格”这部分的话,即采用替换值的默认展现方式,则英文冒号也应一块去掉。

2.1 字段名的表示方法

x1 = '{} {} {}'.format("I","love","Python")
x2 = '{2} {1} {0}'.format("Python","love","I")
x3 = '{2} {1} {0},{0},{0}!'.format("Python","love","I")
x4 = '{v3} {v2} {v1},{v1},{v1}!'.format(v1="Python",v2="love",v3="I")
d = {"v1":"Python","v2":"love","v3":"I"}
x5 = '{v3} {v2} {v1},{v1},{v1}!'.format(**d)
x6 = '{v1[0]}-{v1[1]}-{v1[2]}-{v1[3]}-{v1[4]}-{v1[5]}'.format(v1="Python")
l = [1,2,3,4]
x7 = '第一个偶数:{0[1]};第二个偶数:{0[3]}'.format(l)
print(x1)
print(x2)
print(x3)
print(x4)
print(x5)
print(x6)
print(x7)

上述程序的输出结果如下所示:

I love Python
I love Python
I love Python,Python,Python!
I love Python,Python,Python!
I love Python,Python,Python!
P-y-t-h-o-n
第一个偶数:2;第二个偶数:4

从上述代码可以看出,字段名的表示方法非常灵活:

  • 变量x1所在行:因为占位符的插入顺序与format的参数顺序一一对应,且采用默认字符串展现形式,因此整个“替换字段”内容都省了,仅剩下空大括号;
  • 变量x2所在行:因为插入顺序与参数顺序不一致,则采用参数索引值(从0开始,0、1、2…)明确标示出来;
  • 变量x3所在行:同一个参数可以在字符串的不同位置反复格式化插入;
  • 变量x4所在行:可以采用参数名的形式明确各参数的插入位置,需要注意的是,此时format的参数也要以相应参数名的形式进行传递;
  • 变量d及x5所在行:对于字典a(后面我们会进一步学到字典数据类型),先进行拆包(即:“**d”),拆包成与x4所在行一样的带参数名的参数进行传递;
  • 变量x6所在行:采用参数名及字符串索引的形式获得字符串中的任一字符;
  • 变量l及x7所在行:对于列表b(后面我们会进一步学到列表数据类型),同样可以采用列表索引的形式获得任一列表元素。

2.2 格式规格的表示方法

常用到的格式规格如下所示,主要包括如下7个配置部分(为了区分开来,用中括号把各配置部分括了起来;另外,给各配置部分起的英文名也只是为了区分标识而已,无其他特殊用途),各部分配置都是可选的(即根据需要可有可无),但必须保持他们之间的先后顺序不能乱。

[align][sign][0][width][grouping_option][.precision][type]

  • [align]:对齐选项,常用到如下三个选择:

    • “<”:让代入的值在可用空间内左对齐(大多数数据类型的默认值)
    • “>”:让代入的值在可用空间内右对齐(数字类型的默认值)
    • “^”:让代入的值在可用空间内居中
  • [sign]:符号选项,仅对代入的数字类型有效,常用到如下三个选择:

    • “+”:正数显示正号、负数显示负号
    • “-”:仅负数显示负号(这是默认值)
    • 空格:负数显示负号、正数前加一个空格(用于需要对齐的场合,显示得更整齐)
  • [0]:补零,仅对代入的数字类型有效,只有一个选项,即“0”,对于显示区域有多余空间的,将在数字的符号(如果有的话,取决于上一项的配置)之后、数字之前用“0”填充,比如“+0000120”。

  • [width]:宽度设置,在该位置上使用一个整数指定代入值的显示区域宽度,如果未指定,则最终的显示区域宽度由代入值的实际需要确定。

  • [grouping_option]:分组选项,常用的选项为“,”(即英文逗号),用作代入的数字类型,要求按千位分隔符的形式显示。

  • [.precision]:精度设置,在“.”(即英文句号,需要带上该句号)后使用一个整数,用作代入的浮点型数值,要求在小数点后显示的位数,对于整数型数值,不允许使用该配置。

  • [type]:确定代入值的呈现类型、进制,常用到如下选择:

    • 's’字符串格式,这是字符串的默认类型,可以省略。
    • 'd’十进制整数,输出以10为基数的数字。
    • 'b’二进制格式,输出以2为基数的数字。
    • 'f’数字显示为一个小数。
    • 'x’十六进制格式,输出以16为基数的数字,使用小写字母表示9以上的数码。
    • 'X’十六进制格式,输出以16为基数的数字,使用大写字母表示9以上的数码。
    • '%'百分比,将数字乘以100并显示为小数 (‘f’) 格式,后面带一个百分号。

例如:

x1 = '|{0:<10}|{0:^10}|{0:>10}|'.format("对齐测试")
print(x1)
x2 = '|{0:+.1f}|{0: .1f}|{0:-.1f}|'.format(3.14)
x3 = '|{0:+.1f}|{0: .1f}|{0:-.1f}|'.format(-3.14)
print(x2)
print(x3)
x4 = '{:.2%}'.format(3.14159265)
print(x4)
x5 = '|{:12,d}|'.format(12345678)
print(x5)
x6 = '十六进制表示:0x{:x}'.format(1024)
print(x6)

上述程序的输出结果如下所示:

|对齐测试      |   对齐测试   |      对齐测试|
|+3.1| 3.1|3.1|
|-3.1|-3.1|-3.1|
314.16%
|  12,345,678|
十六进制表示:0x400

3. f-string格式化方法

f-string是Python3.6版本新增加的一个非常好用、非常灵活的字符串格式化方法,如下所示:

a = "Python"
x1 = f"Hello {a}:{a:>10}"
print(x1)

b = 560
x2 = F"计算结果:{3.14159265*b+100:+10,.2f}"
print(x2)

上述程序的输出结果如下所示:

Hello Python:    Python
计算结果: +1,859.29

总结一下f-string的使用方法:

  • 在字符串前加上“f”或者“F”后,就可以在字符串里的任意位置插入大括号(即“{}”,相当于占位符);
  • 在大括号里面填入表达式,表达式里可以包含变量、数字/字符串运算,甚至函数调用,Python会求出结果并把结果植入到该占位符所在位置;
  • 若需要对上述表达式的计算结果进行格式化,则可以在表达式后面加上英文冒号,采用与str.format()相同的格式规格方法,格式化结果输出。

青少年、零基础、初学者Python编程从入门到精通,“老马带小马 一块学Python”编程系列

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值