python格式化输出
详细介绍了三种格式化输出的方式,包括占位符%格式化、format方法格式化、f-string格式化。
输出函数print
在介绍input输入函数时已经用到了输出函数print,不难发现,print函数是用来将指定的内容打印输出的,一般是将内容输出打印在标准输出流上,即控制台上。现在详细介绍一下,首先,看一下print函数的形式,print(self, *args, sep=’ ‘, end=’\n’, file=None),下面介绍一下参数sep、end、file。
参数sep:在输出多个值时,在值之间插入的字符串,默认为空格。
参数end:最后一个值后面追加的字符串,即打印结束符,默认为换行符。
参数file:类似文件的对象流,默认为sys.stdout。sys.stdout是Python中的标准输出流,默认是映射到控制台的,即将信息打印到控制台。
hi = '大家好'
name = '我是周杰伦'
print(hi, name, sep=',') # 用逗号隔开多个变量#print函数在打印完变量后,默认用换行符来结束,这是由print函数的**end参数**控制的
#修改参数end的值就可以用其他的符号来结束,比如将上面的两个print函数的打印结果输出在一行。
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) # %% 表示打印百分号%, 第一个%用来转义
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))
f-string格式化
f-string格式化是在Python3.6之后引入的一种新的字符串格式化方式,这种格式化方式使用非常简单,只需要在字符串前面加上 f 或F ,并用花括号 {} 在字符串中表示要被替换的变量,其中花括号 {} 内直接填入要替换的变量。数据类型代号和辅助符号用冒号:连接在在变量的后面,可以不填。
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 datetimeprint(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这种新的字符串格式化方法。