学Python你还只会用%格式化输出?速看,三种格式化方式,最后一个是大招

学Python你还只会用%格式化输出?速看,三种格式化方式,最后一个是大招,第1张

文章目录
  • 欢迎关注公众号【Python开发实战】,免费领取Python、PyCharm安装教程和Python学习电子书!
  • 输出函数print
  • 格式化输出
    • 占位符`%`格式化
    • format方法格式化
    • f-string格式化

欢迎关注公众号【Python开发实战】,免费领取Python、PyCharm安装教程和Python学习电子书!

学Python你还只会用%格式化输出?那你就落伍了!本文介绍了Python中的输出函数print,并详细介绍了三种格式化输出的方式,包括占位符%格式化、format方法格式化、f-string格式化。

输出函数print

在介绍input输入函数时已经用到了输出函数print,不难发现,print函数是用来将指定的内容打印输出的,一般是将内容输出打印在标准输出流上,即控制台上。现在详细介绍一下,首先,看一下print函数的形式,print(self, *args, sep=' ', end='\n', file=None),下面介绍一下参数sependfile

  • 参数sep:在输出多个值时,在值之间插入的字符串,默认为空格。
  • **参数end**:最后一个值后面追加的字符串,即打印结束符,默认为换行符。
  • **参数file**:类似文件的对象流,默认为sys.stdout。sys.stdout是Python中的标准输出流,默认是映射到控制台的,即将信息打印到控制台。

下面通过几个示例对print函数做一下演示。

示例1:打印多个变量,并修改变量间的分隔符

hi = '大家好'
name = '我是周杰伦'
print(hi, name)

输出:

print函数可以接受多个变量进行打印输出,每个变量之间用逗号隔开即可,print会依次打印每个变量。在打印时,每个变量之间默认插入空格隔开,这是由print函数的**sep参数**控制的, 修改参数sep的值就可以用其他的符号隔开多个变量。

hi = '大家好'
name = '我是周杰伦'
print(hi, name, sep=',')   # 用逗号隔开多个变量

输出:

示例2:修改打印结束符

hi = '大家好'
name = '我是周杰伦'
print(hi)
print(name)

输出:

print函数在打印完变量后,默认用换行符来结束,这是由print函数的**end参数**控制的, 修改参数end的值就可以用其他的符号来结束,比如将上面的两个print函数的打印结果输出在一行。

hi = '大家好'
name = '我是周杰伦'
print(hi, end=',')
print(name)

输出:

格式化输出

在Python中,格式化输出就是将变量按照指定的格式进行转换后再打印输出。下面介绍三种格式化输出的方式:占位符%格式化、format方法格式化、f-strting格式化,其中f-string格式化是在Python3.6之后引入的一种新的字符串格式化方式。下面将详细介绍每一种格式化输出。

占位符%格式化

在要打印的字符串中,用占位符%和一个数据类型代号来代替变量,并放在对应的位置,这就是占位,比如使用%d可以对int类型的变量进行占位。

但是占位之后怎么传进去变量的值呢?这就需要在字符串后面用%将变量连接起来,多个变量时可以使用元组,元组中按占位符的顺序放入对应的变量即可。因此,这个元组中变量的数量应和字符串中占位符的个数相等,否则会报错。

也就是字符串中有多少个占位符%,就要有多少个变量与占位符%一一对应,并且数据类型也要能够合法对应, 看下面的列子。

name = '周杰伦'
age = 28
print("大家好,我是%s" % name)
print("大家好,我是%s" % (name,))
print("大家好,我是%s,今年%d岁" % (name, age))
print("大家好,我是%(name)s,今年%(age)d岁" % {"name": name, "age": age})

输出:

上面的程序中,最后一条print语句中,在字符串后面%后连接的是字典,则需要在前面的占位符处作修改,即在占位符%和数据类型代号之间加一个辅助符号(字典的键值)映射字典中的值。

good_percent = 98.6529
print('好评率是%f' % good_percent)
print('好评率是%.2f' % good_percent)    # .2表示打印小数点后两位
print('好评率是%.2f%%' % good_percent)  # %% 表示打印百分号%, 第一个%用来转义

输出:

下面是一些数据类型代号和格式化输出的辅助符号。

数据类型代号含义
%s格式化字符串
%c格式化字符及ASCII码
%d格式化有符号整数
%f格式化浮点数,可以指定小数点后的位数,如%.2f
%i格式化有符号整数,老式写法
%u格式化无符号整数
%o格式化无符号八进制数
%x格式化无符号十六进制数
%X格式化无符号十六进制数(大写)
%e科学计数法格式化浮点数
%E同%e,用科学计数法格式化浮点数
%g%f和%e的简写
%G%f和%E的简写
%p用十六进制数格式化变量的地址
辅助符号含义
%转义百分号,%%打印一个%
a.b.a代表打印的最小总宽度,b代表小数点后的位数
(key)根据key映射字典的变量
*定义宽度或小数点的精度
-左对齐
+在正数前显示加号
在正数前显示空格
#在八进制数前显示0,在十六进制数前显示0x或者0X
0打印的数字前面用0填充,默认用空格
format方法格式化

从Python3.0版本开始,引入了一种新的字符串格式化方法,就是使用字符串的format方法,进行格式化输出。在format方法格式化中,使用花括号{}和其中的字符(格式字段)来替代变量,变量则被传递给format方法中。

同样地,前面花括号{}出现几次,format方法中传递的变量就要有几个。但传递给format方法的变量顺序不一定要与前面的花括号对应。因为花括号{}中的数字可以用来表示传递给format方法的变量的位置。

name = '周杰伦'
age = 28
print("大家好,我是{},今年{}岁".format(name, age))
print("大家好,我是{0},今年{1}岁".format(name, age))
print("大家好,我是{1},今年{0}岁".format(age, name))

输出:

format方法中还可以使用关键字参数,则在花括号{}中的使用参数的名称来引用它们的值。

name = '周杰伦'
age = 28
print("大家好,我是{your_name},今年{your_age}岁".format(your_name=name, your_age=age))

输出:

format方法中,位置和关键字参数可以任意组合。format方法中也可以使用数据类型代号和辅助符号,只需在花括号{}内部的最后写入加数据类型代号即可,比如{:d}

name = '周杰伦'
age = 28
print("大家好,我是{0},今年{your_age}岁".format(name, your_age=age))
print("大家好,我是{0},今年{your_age:d}岁".format(name, your_age=age))

输出:

当使用format方法格式化输出浮点数时,如果想要指定小数点后面的位置,只需在花括号{}中写入:.nf即可,n表示要保留小数点后几位。百分号%在使用format方法格式化时是可以正常输出的,不用转义。

good_percent = 98.6529
print('好评率是{}%'.format(good_percent))
print('好评率是{:.2f}%'.format(good_percent))

输出:

如果想要打印一个非常长的字符串,而且不想把它拆开,那么最好是按名称而不是按位置引用变量来进行格式化。 因为按名称来引用变量可以通过简单地传递字典并使用方括号 [] 访问键来完成。

person = {'name': '周杰伦', 'age': 28, 'hobby': '唱歌'}
print('大家好,我是{0[name]},今年{0[age]}岁,我的爱好是{0[hobby]}。'.format(person))

输出:

现在来看一个小例子:输出1-10之间整数的本身、平方和立方。

for x in range(1, 11):
    print('{0:2d} {1:3d} {2:4d}'.format(x, x * x, x * x * x))

输出:

f-string格式化

f-string格式化是在Python3.6之后引入的一种新的字符串格式化方式,这种格式化方式使用非常简单,只需要在字符串前面加上 fF ,并用花括号 {} 在字符串中表示要被替换的变量,其中花括号 {} 内直接填入要替换的变量。数据类型代号和辅助符号用冒号:连接在在变量的后面,可以不填。

name = '周杰伦'
age = 28
print(f"大家好,我是{name},今年{age}岁")

输出:

good_percent = 98.6529
print(f'好评率是{good_percent}%')
print(f'好评率是{good_percent:.2f}%')

输出:

**使用f-string格式化时,要注意花括号内使用的引号不能与花括号外的引号定界符冲突!**简单说,只要花括号内外的引号不同,就没有问题。但是花括号中只用单引号和双引号,花括号外的引号定界符可以使用单引号、双引号、单三引号、双三引号。

如下面的程序中,为了满足花括号内外的引号不同,花括号外的引号定界符使用的是单引号,那么花括号内的引号只能用双引号,不能再使用单引号!

person = {'name': '周杰伦', 'age': 28, 'hobby': '唱歌'}
print(f'大家好,我是{person["name"]},今年{person["age"]}岁,我的爱好是{person["hobby"]}。')

输出:

花括号外的引号定界符使用的是单三引号或双三引号可以打印多行字符串,这时花括号内既可以使用单引号还可以使用双引号。

person = {'name': '周杰伦', 'age': 28, 'hobby': '唱歌'}
print(f"""大家好,
我是{person["name"]},
今年{person[‘age’]}岁,
我的爱好是{person["hobby"]}。
""")

输出:

f-string格式化还可以对date、datetime和time等时间对象进行年月日、时分秒等格式化地打印。注意,花括号外如果想要打印花括号,需要输入连续两个花括号。

from datetime import datetime


print(f'今天是{datetime.today()}')
print(f'今天是{datetime.today():%Y-%m-%d}')
print(f'{{今天}}是{datetime.today():%Y-%m-%d}')

输出:

如果在f-string的花括号内填入可执行的程序语句,如计算表达式等,则在格式化时会求出其结果并填入字符串内。

a = 2
b = 5
print(f'{a} × {b} = {a * b}')

输出:

f-string的优雅之处

  • 相比于占位符格式化,f-string使用花括号加变量的方式,更加容易理解可读性更强。
  • 由于f-string直接使用到了变量进行标记,所以可以不用关心变量占位的顺序,避免了可能的顺序错乱的问题。
  • f-string在花括号中可以使用可执行的程序语句,这使得在格式化占位时更加灵活方便。
  • Python版本在3.6以上的小伙们,推荐多使用f-string这种新的字符串格式化方法。

如果这篇内容对你有所帮助,欢迎点赞,收藏,在看,转发,让更多的小伙伴也能看到哦~

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/923133.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存