Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。
实例(Python 3.0+)
>>> print ("我叫 %s 今年 %d 岁!" % ('小明', 10)) 我叫 小明 今年 10 岁!
python字符串格式化符号:
符 号 | 描述 |
---|---|
%c | 格式化字符及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整型 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化浮点数字,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 作用同%e,用科学计数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %f 和 %E 的简写 |
%p | 用十六进制数格式化变量的地址 |
格式化操作符辅助指令:
符号 | 功能 |
---|---|
* | 定义宽度或者小数点精度 |
- | 用做左对齐 |
+ | 在正数前面显示加号( + ) |
<sp> | 在正数前面显示空格 |
# | 在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X') |
0 | 显示的数字前面填充'0'而不是默认的空格 |
% | '%%'输出一个单一的'%' |
(var) | 映射变量(字典参数) |
m.n. | m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) |
例子:
>>> print('%c'%98) #ASCII对应的字母b,此处c要小写 b >>> print ("我叫 %s 今年 %d 岁!" % ('小明', 10)) 我叫 小明 今年 10 岁! >>> print("%d的八进制为%o"%(100,100)) 100的八进制为144 >>> print("%d的十六进制为%x"%(100,100)) 100的十六进制为64 >>> print("%f"%3.14) #浮点数默认精确到小数点后6位 3.140000 >>> print("一个天文单位 %fkm 用科学计数法表示为 %ekm" % (149597871, 149597871)) 一个天文单位 149597871.000000km 用科学计数法表示为 1.495979e+08km >>> print("%g 这个数交给 Python" % 1.496) #根据值的大小决定使用 %f 或 %e 1.496 这个数交给 Python >>> print("%g 这个数也交给 Python" % 149597871) 1.49598e+08 这个数也交给 Python
#例 %f,n1.n2 # n1 所指位数,小数点也算一位,n1 可省,浮点数默认精确到小数点后 6 位 print("0000000000") # 作为位数参考 print("%6.3f" % 3.1) # 输出位数有多,添零 print("%.3f" % 3.1) # 省 n1,只需考虑要精确的位数,不够添零 print("%7.3f" % 3.14159265) # 输出位数不够,四舍五入 print("%7.3e" % 3.14159265) # 科学计数法的 e 及 e 后字符不算位数 #例 -,+ print("%-6.2fA" % 3.1) # 靠左输出 print("%+6.2f" % 3.1) # 靠右输出,但多一个+ # 例 %0,用于补齐空格, print("%5d" % 3) print("%05d" % 3) # 例 %x,%X,%o print("%x" % 100) # 作为参考 print("%#x" % 100) # %#x 表示按十六进制的格式输出 print("%#X" % 100) # x 不区分大小写 print("%#o" % 100) # %#o 表示八进制,o 为小写字母,大写报错,类型同例1
0000000000
3.100
3.100
3.142
3.142e+00
3.10 A
+3.10
3
00003
64
0x64
0X64
0o144
Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
基本语法是通过 {} 和 : 来代替以前的 % 。
format 函数可以接受不限个参数,位置可以不按顺序。
实例
print("{}{}".format("hello", "world")) print("{} {}".format("hello", "world")) # 不设置指定位置,按默认顺序 print("{1} {0}".format("hello", "world")) # 设置指定位置 0代表第一个 print("{1} {0} {1}".format("hello", "world")) # 设置指定位置
helloworld
hello world
world hello
world hello world
也可以设置参数:
实例
print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com")) # 通过字典设置参数 site = {"name": "菜鸟教程", "url": "www.runoob.com"} print("网站名:{name}, 地址 {url}".format(**site)) # 通过列表索引设置参数 my_list = ['菜鸟教程', 'www.runoob.com'] print("网站名:{0[0]}, 地址 {0[1]}".format(my_list)) # "0" 是必须的
网站名:菜鸟教程, 地址 www.runoob.com 网站名:菜鸟教程, 地址 www.runoob.com 网站名:菜鸟教程, 地址 www.runoob.com
f-string 是 python3.6 之后版本添加的,称之为字面量格式化字符串,是新的格式化字符串的语法。
f-string 格式化字符串以 f 开头,后面跟着字符串,字符串中的表达式用大括号 {} 包起来,它会将变量或表达式计算后的值替换进去,实例如下:
实例
>>> name = 'Runoob' >>> f'Hello {name}' # 替换变量 'Hello Runoob' >>> f'{1+2}' # 使用表达式 '3' >>> w = {'name': 'Runoob', 'url': 'www.runoob.com'} >>> f'{w["name"]}: {w["url"]}' 'Runoob: www.runoob.com'
用了这种方式明显更简单了,不用再去判断使用 %s,还是 %d。
在 Python 3.8 的版本中可以使用 = 符号来拼接运算表达式与结果:
实例
>>> x = 1 >>> print(f'{x+1}') # Python 3.6 2 >>> x = 1 >>> print(f'{x+1=}') # Python 3.8 x+1=2