《手把手陪您学Python》11——字符串的格式化输出

​在上一篇《手把手陪您学Python》10——字符串的函数中,我们学习了字符串的函数处理方法。再加上之前学习的切片、索引和运算,可以说已经将字符串的各种常用操作都接触了一遍。在这一篇中,我们将一起学习字符串的格式化输出方式。

为什么叫做格式化输入呢?这是和我们普通的输出相对应的。

之前我们学习的输出方法,就是使用print()函数,将字符串打印出来。字符串是什么样子的,打印出来的结果就是什么样子的,这就是一般的输出方式。

格式化输出呢?主要有两个特点:

一是可以通过占位符的形式,使输出的结果可以根据我们的需要或者运行的结果进行调整。

考虑一个最简单的例子:掷骰子,然后输出投掷的结果。因为我们不可能预先知道投掷的结果,所以无法用print()函数直接输出。这个时候就需要用到占位符的格式化输出方法了。先把可能随结果变化的部分留出一个地方,然后再根据结果把这块地方补上,最后进行打印。例如:

In [1]: import random

In [2]: result = random.randint(1, 7)   # 随机产生1至6的整数
       print("投掷的结果是:{}。".format(result))
Out[2]: 投掷的结果是:5。

其中,import random的作用是导入随机函数模块,这样才能在后面运行产生随机数的函数。

random.randint(1,  7)就是用来随机产生1到7之间整数的函数,左闭又开,所以结果包括1不包括7,就是1到6了。这个函数也是只有在导入随机函数模块后才能运行,如果不导入直接运行就会报错。

(关于在示例中,我们为了演示而使用了暂未讲到的内容,在文章中会简单的讲一下,大家可以提前了解一下,在以后的文章中还会有更系统的讲解。)

另外,print()函数中的字符串,很明显多了一个{}。但这个{}不会被打印出来,只是一个占位符,打印的内容是由format后面()里的值决定的。在示例中,()里的值是变量result代表的1到6的一个随机值,示例中的值是5,所以就把5放在占位符{}的位置输出出来。

这里只是为了说明格式化输出的特点而举的一个例子,看不懂没有关系,后面会有详细的讲解。

二是可以按照我们期望的格式或者打印效果进行输出。

这种格式化主要是指对数字的格式化,比如改变数字输出的位数,按照科学计数法的方式输出,或者改变数字的对齐方式、使用0或者空格补齐位数等等。例如:

In [3]: a= 123.456789
        print('%.3f'%a)   # %.3f的意思是保留小数点后3位进行输出,同时也是一个占位符,把后面%a代表的值在这个位置输出
Out[3]: 123.457
​
In [4]: a= 123.456789
        print('%010.3f'%a)   # %010.3f的意思是输出的总宽度为10(这个10是小数点前面的10),保留小数点后3位,不足的位置用0补齐(这个0是%右侧的0),进行输出,也同样起到占位符的作用
Out[4]: 000123.457

%就是对输出结果进行格式化的标识符,%后面的内容就是格式化输出的要求,都是用一些数字、字母和符号表示的,看起来可能比较繁琐,我们下面会详细解析。

对于第一种占位符的形式,我们以后会经常用的到。而是否有必要存在第二种对于数字的格式化输出形式,大家可能还不太理解,这个可能要到需要的时候才能想象的到。总之,Python是提供了这样一种对数字进行格式化输出的方式,以备不时之需。

下面,将对格式化输出的方式进行具体的讲解。

Python提供的格式化输出方式一共有三种,分别是format()函数,f方法以及刚才示例中的%格式符方法。其中最常用也是最专业的用法就是format()函数,其它的内容大家可以稍作了解,等需要的时候再回来看。

format()函数

1、format的参数

format的参数是与要输出的字符串中的占位符{}相对应的,而且它们都是不限定个数的,只要有需要,可以增加无限多个占位符和对应的参数。只是考虑到代码的可读性,并不建议使用太多的占位符和参数。

在默认情况下,参数的个数与占位符的个数是相同的,有多少个占位符,就有多少个参数。位置也是按照从左往右的顺序一一对应的,即第一个占位符使用第一个参数填充,第二个占位符使用第二个参数填充,以此类推。

In [5]: print("这篇文章属于{}系列,是系列文章中的第{}篇,副标题是{}。".format('《手把手陪您学Python》', '11', '字符串的格式化输出'))   # 按从左往右的顺序一一对应
Out[5]: 这篇文章属于《手把手陪您学Python》系列,是系列文章中的第11篇,副标题是字符串的格式化输出。

除了默认的这种方式,还有4种可以指定参数顺序或者给占位符进行填充的方式:

a、使用位置索引

位置索引与我们之前介绍的字符串索引方法一样(所以当时说这种方法或者原理非常重要,具体可以参考《手把手陪您学Python》7——字符串的索引一文),只要将format()中的每一个参数,理解为字符串中的每一个字符就行。

format中从左往右的第一个参数就是位置0,第二个参数就是位置1,以此类推。从右往左也是一样,第一个参数(也即从左往右的最后一个参数)就是位置-1,第二个参数就是位置-2。

默认情况下,{}里是不需要放字符的,在使用位置索引时,需要在{}里写上需要填充的参数的位置索引,可以不按顺序,也可以重复填充使用。

大家看一下示例,就很容易理解了。

In [6]: print("本文作者:{0},性别:{1},爱好:{2},笔名:{0}。".format('mnpy', '男', 'Python'))   # 根据占位符中的位置索引,取参数中对应位置的值进行填充
Out[6]: 本文作者:mnpy,性别:男,爱好:Python,笔名:mnpy。

b、使用变量命名

使用变量命名的好处是非常直观,哪个占位符对应哪个参数一目了然。当然也可以不按顺序,或者重复填充使用。

In [7]: print("本文作者:{name},性别:{gender},爱好:{hobby},笔名:{name}。".format(name='mnpy', gender='男', hobby='Python'))   # 根据占位符中的变量,取参数中相同变量的值进行填充
Out[7]: 本文作者:mnpy,性别:男,爱好:Python,笔名:mnpy。

c、使用字典

字典是我们后面要讲到的一种数据结构,如果大家不理解,这块可以先略过。

使用字典的方式与使用变量名类似,区别是使用字典时,各个变量的值都在字典中进行了设置,format的参数只是一个字典类型的对象。

In [8]: info = {'name': 'mnpy',  'gender': '男',  'hobby': 'Python'}
        print("本文作者:{name},性别:{gender},爱好:{hobby},笔名:{name}。".format(**info))   # 根据占位符中的变量,取字典中相同键名对应的值进行填充
Out[8]: 本文作者:mnpy,性别:男,爱好:Python,笔名:mnpy。

注意:format参数的前面还有两个*,不能省略。

d、使用列表

列表也是我们后面要讲到的一种数据结构,如果大家不理解,也可以先略过。

使用列表的方式有点繁琐,需要用到两次位置索引的方式,第一次位置索引是索引format()中参数的位置,如果参数是列表,就要再嵌套一个位置索引,索引的就是列表中元素的位置。

In [9]: info = ['mnpy', '男', 'Python']
        print("本文作者:{1[0]},性别:{1[1]},爱好:{1[2]},笔名:{0}。".format('mnpy', info))   # {}里第一个数字是对format参数的位置索引,[]里的数字是对列表元素的位置索引
Out[9]: 本文作者:mnpy,性别:男,爱好:Python,笔名:mnpy。

讲到这里,大家就基本上能够掌握format()函数的基本用法了,字符串的格式化输出中最重要的内容也就学完了。接下来的内容可能会有些难度,初学阶段用上的情况也不多,所以可以根据自己的需要进行学习。

2、format的数字格式化

刚刚我们学习了使用format()函数对占位符所在位置进行填充的格式化输出方法,接下来,将学习如何对输出的数字进行格式化,也就是让数字按照我们要求的格式进行输出。

format的数字格式化是通过在占位符{}里加上一个“:”,再写上格式化输出方式的相关符号来实现的。这种格式化输出方式总共有8类:

a、精度

精度主要是指按照四舍五入的规则保留到小数点后几位,使用{:.nf}的形式实现,其中的n代表保留的位数,需要用一个数字来代替。{:.0f}代表不保留小数,{:.6f}代表保留到小数点后6位。

f代表float浮点数也就是小数的意思,是与一会儿要讲到的代表整数的d相对应的。如果format中的参数是小数,{}里就必须要使用f;如果format中的参数是整数,{}里可以使用d也可以使用f。因为精度问题只与小数有关,所以这里都要使用f。

In [10]: print("如果不保留小数,π的值显示为:{:.0f}。".format(3.1415926))
Out[10]: 如果不保留小数,π的值显示为:3。
​
In [11]: print("如果保留三位小数,π的值显示为:{:.3f}。".format(3.1415926))   # 四舍五入
Out[11]: 如果保留三位小数,π的值显示为:3.142。
​
In [12]: print("如果保留三位小数,100的值显示为:{:.3f}。".format(100))   # format参数为整数,也可以使用f,根据精度,小数点后自动补0
Out[12]: 如果保留三位小数,100的值显示为:100.000。

当省略精度值只写f时,默认保留到小数点后6位,即与{:.6f}的效果一样。即使format的参数为整数,也保留到小数点后6位。

In [13]: print("如果省略精度值,π的值显示为:{:f}。".format(3.1415926))
Out[13]: 如果省略精度值,π的值显示为:3.141593。
​
In [14]: print("如果省略精度值,100的值显示为:{:f}。".format(100))
Out[14]: 如果省略精度值,100的值显示为:100.000000。
​
In [15]: print("如果省略精度值,100的值显示为:{:d}。".format(100))   # format参数为整数,忽略精度使用d,没有任何效果
Out[15]: 如果省略精度值,100的值显示为:100。

b、对齐、宽度及填充

这三个之所以要放在一起讲,是因为它们是同时起作用的。

对齐是指输出数字的对齐方式,^、<、> 三个符号分别代表居中对齐、左对齐、右对齐。

宽度是数字输出的最小位数,使用数字表示,写在对齐符号的右边。

宽度包括整数位、小数点以及小数位等整个数字的字符数,例如:3.1415926的位数为9。如果数字本身的位数大于指定的宽度,就按照数字本身的位数输出;如果数字本身的位数小于指定的宽度,就按照指定的宽度输出,不足的位数根据对齐方式,使用指定的符号填充。

填充符号写在对齐符号的前面,如果不指定填充符号,就默认使用空格填充。填充符号只能是一个字符,不能是多个字符,也不能是字符串。

In [16]: print("左对齐、宽度10、填充XD,π的值显示为:{:XD<10f}。".format(3.1415926))   # 填充值为多个字符时报错
Out[16]: ---------------------------------------------------------------------------
         ValueError                                Traceback (most recent call last)
         <ipython-input-24-43e3ac9e0166> in <module>
         ----> 1 print("左对齐、宽度10、填充XD,π的值显示为:{:XD<10f}。".format(3.1415926))   # 填充值为多个字符时报错
​
         ValueError: Invalid format specifier
​
In [17]: print("左对齐、宽度10、填充X,π的值显示为:{:'X'<10f}。".format(3.1415926))   # 填充值为字符串时报错
Out[17]: --------------------------------------------------------------------------
         ValueError                                Traceback (most recent call last)
         <ipython-input-25-7a00814795e8> in <module>
         ----> 1 print("左对齐、宽度10、填充X,π的值显示为:{:'X'<10f}。".format(3.1415926))   # 填充值为字符串时报错
         
         ValueError: Invalid format specifier

精度写在宽度的后面,依然是代表保留到小数点后几位,如果省略精度值,默认保留到小数点后6位。

从下例中就可以看到,填充值为一个字符时才是正确的。精度值省略,默认保留小数点后6位,所以数字的宽度为8。指定的宽度为12,差4位,因为是左对齐,所以在最右边使用填充符号X,补齐差的4位。

In [18]: print("左对齐、宽度12、填充X、默认精度6,π的值显示为:{:X<12f}。".format(3.1415926))
Out[18]: 左对齐、宽度12、填充X、默认精度6,π的值显示为:3.141593XXXX。

以上就是format的数字格式化最复杂的一部分规则了,下面会用一些实例和注释对上述规则进行演示。由于填充值采用默认的空格时,会看不出来效果;如果填充值使用0时,会对数字本身产生误读,因此示例中的填充值统一设置为X。

In [19]: print("右对齐、宽度12、填充X、默认精度6,π的值显示为:{:X>12f}。".format(3.1415926))   # 右对齐,前面填充
Out[19]: 右对齐、宽度12、填充X、默认精度6,π的值显示为:XXXX3.141593。
​
In [20]: print("居中对齐、宽度12、填充X、默认精度6,π的值显示为:{:X^12f}。".format(3.1415926))   # 居中对齐,前面平均填充
Out[20]: 居中对齐、宽度12、填充X、默认精度6,π的值显示为:XX3.141593XX。
​
In [21]: print("居中对齐、宽度11、填充X、默认精度6,π的值显示为:{:X^11f}。".format(3.1415926))   # 居中对齐,填充符无法平均分时,左边的填充符少1位
Out[21]: 居中对齐、宽度11、填充X、默认精度6,π的值显示为:X3.141593XX。
​
In [22]: print("左对齐、宽度5、填充X、默认精度6,π的值显示为:{:X<5f}。".format(3.1415926))   # 指定宽度5小于数字宽度8,按照数字宽度输出
Out[22]: 左对齐、宽度5、填充X、默认精度6,π的值显示为:3.141593。
​
In [23]: print("左对齐、宽度5、填充X、精度2,π的值显示为:{:X<5.2f}。".format(3.1415926))   # 指定宽度5大于数字宽度4,左对齐,右边填充
Out[23]: 左对齐、宽度5、填充X、精度2,π的值显示为:3.14X。
​
In [24]: print("左对齐、宽度12、填充X、整数值标识符d,100显示为:{:X<12d}。".format(100))   # format参数为整数,指定宽度12大于数字宽度3,左对齐,右边填充
Out[24]: 左对齐、宽度12、填充X、整数值标识符d,100显示为:100XXXXXXXXX。
​
In [25]: print("左对齐、宽度12、填充X、小数值标识符f,100显示为:{:X<12f}。".format(100))   # format参数为整数,精度默认小数点后6位,指定宽度12大于数字宽度10,左对齐,右边填充
Out[25]: 左对齐、宽度12、填充X、小数值标识符f,100显示为:100.000000XX。

以上示例基本上遍历了精度、对齐、宽度和填充的各种变化情形,如果大家能够在程序运行前准确预测出结果,说明大家已经掌握数字格式化中最难、最容易混淆的部分了,后面的方法就非常容易了。

c、正负号

正负号有三种标识方法。

默认情况是不写正负号标识符,就和我们平时的习惯一样,正数不显示+,负数显示-。

使用+标识符时,正数显示+,负数不变还是显示-。

使用空格标识符时,正数不显示+,但是会空出一个字符的位置,就像输出了一个空格,负数还是显示-。

让我们通过实例看一下。

In [26]: print("采用默认值,正数100显示为:{:d},负数-100显示为:{:d}。".format(100, -100))
Out[26]: 采用默认值,正数100显示为:100,负数-100显示为:-100。
​
In [27]: print("使用+标识符,正数100显示为:{:+d},负数-100显示为:{:+d}。".format(100, -100))
Out[27]: 使用+标识符,正数100显示为:+100,负数-100显示为:-100。
​
In [28]: print("使用空格标识符,正数100显示为:{: d},负数-100显示为:{: d}。".format(100, -100))
Out[28]: 使用空格标识符,正数100显示为:100,负数-100显示为:-100。

如果和精度、对齐、宽度、填充一起使用时,正负号标识符只能放在对齐符号和宽度的中间,其它位置会报错。在计算宽度时,+-号和空格也被计算在数字的位数中。

In [29]: print("同时使用+标识符、左对齐、宽度10、填充X、精度2,正数100显示为:{:X<+10.2f},负数-100显示为:{:X<+10.2f}。".format(100, -100))
Out[29]: 同时使用+标识符、左对齐、宽度10、填充X、精度2,正数100显示为:+100.00XXX,负数-100显示为:-100.00XXX。
​
In [30]: print("同时使用空格标识符、左对齐、宽度10、填充X、精度2,正数100显示为:{:X< 10.2f},负数-100显示为:{:X< 10.2f}。".format(100, -100))
Out[30]: 同时使用空格标识符、左对齐、宽度10、填充X、精度2,正数100显示为:100.00XXX,负数-100显示为:-100.00XXX。

d、千位逗号分隔

千位逗号分隔使用“,”作为标识符,数字会使用“,”对千位进行分隔。

如果和精度、对齐、宽度、填充、正负号一起使用,千位分隔标识符只能放在宽度的后面。在计算宽度时,每一个逗号分隔符都算一个位数。

In [31]: print("1000000按照千位分隔符显示为:{:,}。".format(1000000))
Out[31]: 1000000按照千位分隔符显示为:1,000,000。
​
In [32]: print("1000000同时按照多种格式化条件显示为:{:X<+15,.2f}。".format(1000000))   # 千位分隔标识符只能放在宽度的后面
Out[32]: 1000000同时按照多种格式化条件显示为:+1,000,000.00XX。

e、百分比

百分比格式使用%作为标识符,会将数字转换成百分比的数值进行输出。

如果不指定精度,默认按照保留小数点后6位输出。如果希望小数点后保留其它位数,需要指定精度。如果和精度、对齐、宽度、填充、正负号、千位分隔符一起使用时,百分比标识符只能放在最后,且不能包含f或d。在计算宽度时,%也占用一个数字位数。

f、科学计数法

科学计数法使用e作为标识符,会将数字转化成科学计数法的形式进行输出。

科学计数法的输出方法和百分比除了标识符不同,其它的都一样。如果不指定精度,也是默认按照保留到小数点后6位输出。如果希望小数点后保留其它位数,需要指定精度。如果和精度、对齐、宽度、填充、正负号、千位分隔符一起使用时,科学计数法标识符也只能放在只能放在最后,且不能包含f或d。在计算宽度时,e+分别各占用一个位数。

In [35]: print("1000000按照科学计数法显示为:{:e}。".format(1000000))
Out[35]: 1000000按照科学计数法显示为:1.000000e+06。
​
In [36]: print("1000000同时按照多种格式化条件显示为:{:X<+15,.2e}。".format(1000000))   # 科学计数法标识符只能放在最后,且不能包含f和d的标识符
Out[36]: 1000000同时按照多种格式化条件显示为:+1.00e+06XXXXXX。

g、进制转换

进制转换是指将我们平时使用的十进制,转换成二进制、八进制、十六进制等。因为用到的时候很少,所以就简单举几个例子。

In [37]: print("11转换成二进制显示为:{:b}。".format(11))
Out[37]: 11转换成二进制显示为:1011。
​
In [38]: print("11转换成八进制显示为:{:o}。".format(11))
Out[38]: 11转换成八进制显示为:13。
​
In [39]: print("11转换成十进制显示为:{:d}。".format(11))
Out[39]: 11转换成十进制显示为:11。
​
In [40]: print("11转换成十六进制显示为:{:x}。".format(11))
Out[40]: 11转换成十六进制显示为:b。
​
In [41]: print("11转换成十六进制显示为:{:#x}。".format(11))   # 增加0x
Out[41]: 11转换成十六进制显示为:0xb。
​
In [42]: print("11转换成十六进制显示为:{:#X}。".format(11))   # 增加0X
Out[42]: 11转换成十六进制显示为:0XB。

h、转义{}

如果在格式化输出的过程中,或者就是在普通输出的过程中,真的是要输出{}时,就需要用大括号里包括大括号{{}}的方式进行转义,以直接输出{}。

In [43]: print("这个{{}}是要直接输出的,{{}}里面有内容也可以,就像{{这个}}一样,而这个{}是要进行格式化输出的。".format('大括号'))
Out[43]: 这个{}是要直接输出的,{}里面有内容也可以,就像{这个}一样,而这个大括号是要进行格式化输出的。

3、在设置format参数的同时进行数字格式化

以上的示例都是format()函数在占位符和参数一一对应的方式下演示的,如果使用位置索引、变量名、字典、列表等方式是否也可以同时进行数字的格式化输出呢?

答案是可以的。数字格式化输出时的“:”标识符,就是起到将位置索引、变量名等与数字格式化符号进行区分的作用的。以下四个实例的格式化输出方式是等效的,输出结果也完全一样。

In [44]: print("使用位置索引,π的值可以显示为:{1:X^12f},100可以显示为:{0:f},或者显示为:{0:&>8,.2f}。".format(100,3.1415926))
Out[44]: 使用位置索引,π的值可以显示为:XX3.141593XX,100可以显示为:100.000000,或者显示为:&&100.00。
​
In [45]: print("使用变量名,π的值可以显示为:{pai:X^12f},100可以显示为:{num:A<f},或者显示为:{num:&>8,.2f}。".format(num=100,pai=3.1415926))
Out[45]: 使用变量名,π的值可以显示为:XX3.141593XX,100可以显示为:100.000000,或者显示为:&&100.00。
​
In [46]: info = {'pai': 3.1415926, 'num': 100}
         print("使用字典,π的值可以显示为:{pai:X^12f},100可以显示为:{num:A<f},或者显示为:{num:&>8,.2f}。".format(**info))
Out[46]: 使用字典,π的值可以显示为:XX3.141593XX,100可以显示为:100.000000,或者显示为:&&100.00。
​
In [47]: info = [3.1415926, 100]
         print("使用列表,π的值可以显示为:{1[0]:X^12f},100可以显示为:{1[1]:A<f},或者显示为:{0:&>8,.2f}。".format(100, info))
Out[47]: 使用列表,π的值可以显示为:XX3.141593XX,100可以显示为:100.000000,或者显示为:&&100.00。

上面用了较大的篇幅给大家介绍了format()函数的格式化输出方法。如果到这里的内容大家都能掌握了,不说对format()函数已经掌握得如火纯情了,也足以能够应付目前的需要了。

下面将要介绍另外两种格式化输出的方法,因为不太常用,或者已经被format()替代,会讲的简要一些,大家如果有兴趣,也可以像上面学习format一样,对不同的情形及其组合进行逐一的探索。这种方法既是我学习Python用到的方法,也是我建议大家学习使用的方法。

f方法

f方法也是格式化输出的一种方法,格式是在print()函数中,在要打印的字符串前写一个“f”,代表后面的字符串中有占位符用来进行格式化输出的内容。类似这个样子:

print(f"要打印的内容,要格式化输出的部分:{变量名}")

相比format()函数的灵活多变,f方法就简单的多了。它有点类似于format()函数中使用变量进行命令的方法。只不过使用f方法,要在print()语句前完成给变量赋值,在print()语句中的占位符中写上对应的变量名称。

In [48]: name = 'mnpy'
         gender = '男'
         hobby = 'Python'
         print(f"本文作者:{name},性别:{gender},爱好:{hobby},笔名:{name}。")
Out[48]: 本文作者:mnpy,性别:男,爱好:Python,笔名:mnpy。

使用f方法也可以进行数字格式化输出。

与format()函数进行数字格式化的方式类似,也是在{}里的变量名后面加上“:”进行区分。数字格式化的符号也与format()函数通用,放在“:”的后面。

In [49]: num=100
         pai=3.1415926
         print(f"使用f方法,π的值可以显示为:{pai:X^12f},100可以显示为:{num:A<f},或者显示为:{num:&>8,.2f}。")
Out[49]: 使用f方法,π的值可以显示为:XX3.141593XX,100可以显示为:100.000000,或者显示为:&&100.00。

%格式符方法

虽然我们之前讲了很多关于format()函数的格式化输出方法,但其实,%格式符方法才是字符串格式化输出的鼻祖,只不过Python从2.6版本新增了format()函数后,%格式符方法才逐渐被替代的。不过,现在%格式符方法依然还在使用,所以我们也简单了解一下。

有了format()函数的基础,%格式符方法就非常容易理解了。

format()函数是使用{}作为占位符的,{}里面写数字格式化符号。%格式符方法是用%作为占位符的,%后面写数字格式化符号。

format()函数在.format后的()里写参数,%格式符方法是在%后的()写参数。

另外就是格式化的符号稍微与format()函数有些不同,但有了format()函数的基础,大家应该也很容易理解了。

 符号

描述

%c

 格式化字符及其ASCII码

%s

 格式化字符串

%d

 格式化整数

%u

 格式化无符号整型

%o

 格式化无符号八进制数

%x

 格式化无符号十六进制数

%X

 格式化无符号十六进制数(大写)

%f

 格式化浮点数字,可指定小数点后的精度

%e

 用科学计数法格式化浮点数

%E

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

%g

 %f和%e的简写

%G

 %F 和 %E 的简写

%p

 用十六进制数格式化变量的地址

m.n

m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

*

定义宽度或者小数点精度

-

用做左对齐

+

在正数前面显示加号( + )

<sp>

在正数前面显示空格

#

在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X')

0

显示的数字前面填充'0'而不是默认的空格

%

'%%'输出一个单一的'%'

下面举几个例子,没有覆盖到的符号或者组合形式,请大家尝试探索一下。

In [50]: print("如果输出字符串,π的值显示为:%s。" %(3.1415926))
Out[50]: 如果输出字符串,π的值显示为:3.1415926。
​
In [51]: print("如果输出整数,π的值显示为:%d。" %(3.1415926))
Out[51]: 如果输出整数,π的值显示为:3。
​
In [52]: print("如果输出八进制数,11的值显示为:%o;如果输出十六进制数,20的值显示为:%x。" %(8, 20))
Out[52]: 如果输出八进制数,11的值显示为:10;如果输出十六进制数,20的值显示为:14。
​
In [53]: print("如果保留2位小数,π的值显示为:%.2f。" %(3.1415926))
Out[53]: 如果保留2位小数,π的值显示为:3.14。
​
In [54]: print("如果用科学计数法,1000000的值显示为:%.2e。" %(1000000))   # 小数点后保留2位,和format一样,也不写f
Out[54]: 如果用科学计数法,1000000的值显示为:1.00e+06。
​
In [55]: print("左对齐、宽度12、填充空格、默认精度6,π的值显示为:%-12f。"%(3.1415926))
Out[55]: 左对齐、宽度12、填充空格、默认精度6,π的值显示为:3.141593    。
​
In [56]: print("右对齐、宽度12、填充空格、精度2,π的值显示为:%12.2f。"%(3.1415926))   # 不写-就是默认右对齐
Out[56]: 右对齐、宽度12、填充空格、精度2,π的值显示为:3.14。
​
In [57]: print("右对齐、宽度12、填充0、精度2、整数显示+,π的值显示为:%+012.2f。"%(3.1415926))   # 不写-就是默认右对齐
Out[57]: 右对齐、宽度12、填充0、精度2、整数显示+,π的值显示为:+00000003.14。
​
In [58]: print("这个%%是要直接输出的,而这个%s是要进行格式化输出的。" %'百分号')   # %后如果只有一个参数可以不写(),但为了方便阅读,除了本例作为演示没有写(),上面即使只有一个参数,也写()了
Out[58]: 这个%是要直接输出的,而这个百分号是要进行格式化输出的。

关于字符串的格式化输出到此就全部介绍完了,这应该是所有文章里最长的一篇了,可能也稍微有些难度。建议大家可以根据自己的需要,先学习format()函数的参数部分,之后学习format()函数的数字格式化,用到的时候再回来了解f方法和%格式符方法。

至此,Python的字符串部分基本上就讲完了,大家是否已经感受到Python的强大了?单单一个字符串就有如此多的运算、方法、函数和输出方式。

如果学到这里,大家觉得有些枯燥,请稍微再忍耐两篇文章。在接下来的两篇文章里,将给大家介绍数字和运算的相关内容。一是这两部分内容非常简单,二是学完这两部分后,就准备带着大家正式进入编程的环节了。

到时,就不光有枯燥的理论知识了,还可以运用已学的内容自己动手编写一些有意思的程序了。所以,请大家一定要再坚持一下。

 

 


感谢阅读本文!如有任何问题,欢迎留言,一起交流讨论^_^

欢迎扫描下方二维码,关注“亦说Python”公众号,阅读《手把手陪您学Python》系列文章的其他篇目,或点击下方链接直达。

《手把手陪您学Python》1——为什么要学Python?

《手把手陪您学Python》2——Python的安装

《手把手陪您学Python》3——PyCharm的安装和配置

《手把手陪您学Python》4——Hello World!

《手把手陪您学Python》5——Jupyter Notebook

《手把手陪您学Python》6——字符串的标识

《手把手陪您学Python》7——字符串的索引

《手把手陪您学Python》8——字符串的切片

《手把手陪您学Python》9——字符串的运算

《手把手陪您学Python》10——字符串的函数

For Fans:关注“亦说Python”公众号,回复“手11”,即可免费下载本篇文章所用示例语句。

亦说Python——Python爱好者的学习分享园地

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值