在上一篇《手把手陪您学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的参数是与要输出的字符串中的占位符{}相对应的,而且它们都是不限定个数的,只要有需要,可以增加无限多个占位符和对应的参数。只是考虑到代码的可读性,并不建议使用太多的占位符和参数。
在默认情况下,参数的个数与占位符的个数是相同的,有多少个占位符,就有多少个参数。位置也是按照从左往右的顺序一一对应的,即第一个占位符使用第一个参数填充,第二个占位符使用第二个参数填充,以此类推。
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()函数的基本用法了,字符串的格式化输出中最重要的内容也就学完了。接下来的内容可能会有些难度,初学阶段用上的情况也不多,所以可以根据自己的需要进行学习。
刚刚我们学习了使用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)
in
----> 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)
in
----> 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]: 这个{}是要直接输出的,{}里面有内容也可以,就像{这个}一样,而这个大括号是要进行格式化输出的。
以上的示例都是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:A8,.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:A8,.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]:A8,.2f}。".format(100, info))
Out[47]: 使用列表,π的值可以显示为:XX3.141593XX,100可以显示为:100.000000,或者显示为:&&100.00。
上面用了较大的篇幅给大家介绍了format()函数的格式化输出方法。如果到这里的内容大家都能掌握了,不说对format()函数已经掌握得如火纯情了,也足以能够应付目前的需要了。
下面将要介绍另外两种格式化输出的方法,因为不太常用,或者已经被format()替代,会讲的简要一些,大家如果有兴趣,也可以像上面学习format一样,对不同的情形及其组合进行逐一的探索。这种方法既是我学习Python用到的方法,也是我建议大家学习使用的方法。
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:A8,.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 是小数点后的位数(如果可用的话) |
* |
定义宽度或者小数点精度 |
- |
用做左对齐 |
+ |
在正数前面显示加号( + ) |
|
在正数前面显示空格 |
# |
在八进制数前面显示零('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”,即可免费下载本篇文章所用示例语句。