字符串的格式化
Python中内置了%对字符串的格式化
在字符串外面的%左侧是一个字符串,将这个字符串当作模板,字符串里面有%(格式符),这些格式符为真实值预留位置;在字符串外面的%右侧是真实值,这些值用元组放到一起,左边有多少个格式符,右边就对应有多少个值,不能多也不能少。
%s:字符串格式符
例:
str1 = "I am %s,how are you %s" tuple1 = ("lilei","hanmeimei") print(str1 % tuple1)
结果
I am lilei,how are you hanmeimei
%d:整数十进制
%x:16进制
%f:浮点型
%r:打印时能重现它所代表的对象。reper()方法
例:
print("第一种情况:") print("I am %d years old" % 22) print("I am %s years old" % 22) print("I am %r years old" % 22) print("第二种情况:") str="I am %d years old" % 22 print("she said:%s" % str) print("she said:%r" % str) #结果给字符串加了单引号 print("第三种情况:") import datetime time=datetime.date.today() print("today is %s" % time) print("today is %r" % time) #日期格式也不一样
结果:
第一种情况: I am 22 years old I am 22 years old I am 22 years old 第二种情况: she said:I am 22 years old she said:'I am 22 years old' 第三种情况: today is 2018-11-07 today is datetime.date(2018, 11, 7)
字段宽度和精度:
import math #pi的精确度和位数 print(math.pi) #10表示字段宽度为10位,小数点加上小数点前后的位数,小数点后面的表示精度 print("#10表示字段宽度为10位,小数点加上小数点前后的位数,小数点后面的表示精度") print("%10f" % math.pi) print("%.2f" % math.pi ) print("%10.2f" % math.pi) #对于字符串,小数点后面表示输出的最大宽度(在字符串中从左往右取) print("#对于字符串,小数点后面表示输出的最大宽度(在字符串中从左往右取)") print("%.8s" % "Python is great!") #对于*,小数点前后的位数将从元组中取 print("#对于*,小数点前后的位数将从元组中取") print("%.*s" % (4,"Python is great!")) print("%.*f" % (2,math.pi)) print("%*.*f" % (10,2,math.pi))
结果:
3.141592653589793 #10表示字段宽度为10位,小数点加上小数点前后的位数,小数点后面的表示精度 3.141593 3.14 3.14 #对于字符串,小数点后面表示输出的最大宽度(在字符串中从左往右取) Python i #对于*,小数点前后的位数将从元组中取 Pyth 3.14 3.14
对齐、加减号、补0
from math import pi #010表示宽度为10,左侧不足补0 print("#补0") print("%010.2f"% pi) #默认为右对齐,-表示左对齐 print("-表示左对齐") print("%-10.2f"% pi) #空格表示正数前面加上空格 print("空格表示整数前面加上空格") print("% 5d"% 10) print("% 5d"% -10) #"+"表示前面加上正负号 print("+表示要加上正负号") print(("%+2d"% 10) + " " + ("%+11f"% -pi))
结果:
#补0 0000003.14 -表示左对齐 3.14 空格表示整数前面加上空格 10 -10 +表示要加上正负号 +10 -3.141593
总结:
1. %字符:标记转换说明符的开始
2. 转换标志(可选):-表示左对齐;+表示在转换值之前要加上正负号;“”表示正数之
前保留空格;0表示转换值若位数丌够则用0填充。
3. 最小字段宽度(可选):转换后的字符串至少应该具有该值指定的宽度。
4. 点(.)后跟精度值(可选):如果转换的是实数,精度值就表示出现在小数点后的位数。如果转换的是字符串,那么该数字就表示最大字段宽度。如果是”*”,那么精度将会从元组中读出。