Python格式化有两种方式,一种利用%号格式输出,另一种利用Format;
建议利用Format格式,其具有较好的可扩展性
符号 | 描述 |
---|---|
%c |
格式化字符及其ASCII码
|
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整形 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数 |
%f | 格式化浮点数字,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 用科学计数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %F和%E的简写 |
%p | 用十六进制数格式化变量的地址 |
符号 | 功能 |
---|---|
* |
定义宽度或者小数点精度
|
- | 用做左对齐 |
+ | 在正数前面显示加号(+) |
在正数前面显示空格 | |
# | 在八进制数前面显示零(“0”),在十六进制前面显示‘0x’或者‘0X’(取决于用的是‘x’还是‘X’) |
0 | 显示的数字前面填充‘0’而不是默认的空格 |
% | %%输出一个单一的‘%’ |
(var) | 映射变量(字典参数) |
m.n. | m是显示的最小总宽度,n是小数点后的位数(如果可用的话) |
print('小女孩是%d月%d号出生的' %(3,18))
小女孩是3月18号出生的
如果要在print()函数中打印%号,则不能用\符号,需要用两个%%号,最后打印的即为一个%号
print('%%10d代表打印的整数至少为%10d位' %(10))
print('%%20S代表输出字符串:%20s宽度至少为%d' %('www.cn.bing.com',20))
print('%%09d代表输出的整数:%09d至少为%d位,前面不足的用0补足'%(123465,9))
print('%%+09d代表输出的整数:%+09d至少为%d位,显示正负号'%(123654,9))
print('%%+-9f代表输出的浮点数: %+-9f至少为%03d位数,显示正负号并且左对齐'%(1.3024,9))
print('%%+09.5f代表输出的浮点数:%+09.5f 显示正负号,最小宽度为9,精度为5,左边不足的补0'%(3.141592654))
%10d代表打印的整数至少为 10位
%20S代表输出字符串: www.cn.bing.com宽度至少为20
%09d代表输出的整数:000123465至少为9位,前面不足的用0补足
%+09d代表输出的整数:+00123654至少为9位,显示正负号
%+-9f代表输出的浮点数: +1.302400至少为009位数,显示正负号并且左对齐
%+09.5f代表输出的浮点数:+03.14159 显示正负号,最小宽度为9,精度为5,左边不足的补0
编写新代码时,应选择使用字符串方法format,它融合并强化了早期方法的优点。使用这种方法时,每个替换字段都用花括号括起,其中可能包含名称,还可能包含有关如何对相应的值进行转换和格式设置的信息。
print的Format格式其实是打印字符串类型的Format函数返回的字符串,也就是说这个语法只是调用了字符串的format函数,而print只是打印了一串字符串。字符串类型还有很多其他函数…
print("{}, {} and {}".format('First','Second','Three'))
print("{1}, {0} and {2}".format('First','Second','Three'))
print("{Variable} is approximately {value:4.1f}".format(value = 3.14,Variable=3.1415))
First, Second and Three
Second, First and Three
3.1415 is approximately 3.1
特殊的使用Format格式可以使用索引,还可以使用句点表示法来访问导入的模块中的方法、属性、变量和函数。
如下示例:
在字符串前加‘u’意思为将字符串进行utf-8编码
在字符串前加’r’意为对字符串不进行格式化转换
print(r'Hello\n')
print(u'Hello\n')
Hello\n
Hello
import math
tmpl = "The {mod.__name__} module defines the value {mod.pi} for pi"
print(tmpl.format(mod=math))
The math module defines the value 3.141592653589793 for pi
Format 还可以打印千位分隔符、字符串切片
print("{:,} is ?".format(10000000000000000000000000000000000000000000))
print("{:.5}".format('Hello world'))
10,000,000,000,000,000,000,000,000,000,000,000,000,000,000 is ?
Hello
Format 还可以通过<,>,^分别指定左对齐,右对齐及居中
iVar = 45321
print('{s1:>20.3f}\n{s1:b}\n{s1:e}\n{s1:o}\n{s1:x}\n{s1:X}\n{s1:%}'.format(s1=iVar))
45321.000
1011000100001001
4.532100e+04
130411
b109
B109
4532100.000000%
字符串除了有Format函数格式外,还有其他函数也可以作为输出
print('a'*10)
print('sdf'.capitalize())
print('Hello python'.center(50))
aaaaaaaaaa
Sdf
Hello python
字符串的Format函数也可以将分配参数作为输入
octets = [192, 168, 45, 1]
print('{:02b},{:02o},{:02X},{:02d}'.format(*octets))
def add(u,v,w,x):
print(u)
print(v)
print(w)
print(x)
add(*octets)
11000000,250,2D,01
192
168
45
1
11000000,250,2D,01
width = 50
#int(input('Plesase enter the width: '))
price_Width = 10
item_width = width - price_Width
header_fmt = '{{:{}}}{{:>{}}}'.format(item_width,price_Width)
fmt = '{{:{}}}{{:>{}.2f}}'.format(item_width,price_Width)
print('='*width)
print(header_fmt.format('item','price'))
print('-'*width)
print(fmt.format('apple',0.4))
print(fmt.format('pears',0.52))
print(fmt.format('Prunes (4 lbs.)',12))
print('-'*width)
==================================================
item price
--------------------------------------------------
apple 0.40
pears 0.52
Prunes (4 lbs.) 12.00
--------------------------------------------------
注意:format 格式中print如果要在最终结果中包含花括号’{‘’}‘符号,则需要额外加一个符号来指定’{{‘和’}}’
注意:在format 中默认的数字与字符串的对齐方式是不一样的,数字对齐方式是右对齐,字符串默认对齐方式为左对齐
具体的示例及格式解释可参考Kindle Python基础教程
以上例子就是用的双花括号 header_fmt = ‘{{:{}}}{{:>{}}}’.format(item_width,price_Width)
'{{:{}}}{{:>{}}}'中,{{:{}}}会在format后返回{:item_width},因为双花括号会返回一个单花括号,以上的例子相当于做了两次format嵌套,由内到外填充替换字段
# 可以放在符号说明符和宽度之间(如果指定了这两种设置),这个选项将触发另一种转换方式,转换细节随类型而异。例如,对于二进制、八进制和十六进制转换,将加上一个前缀。
print('{:b}'.format(45))#输出二进制
print('{:#b}'.format(45))#输出二进制带字符
print('{:#o}'.format(45))#输出八进制带字符
print('{:#x}'.format(45))#输出十六进制带字符
101101
0b101101
0o55
0x2d