format
python支持格式化字符串的输出。目前有两种方式:一种是类似于C语言的printf函数的方法。另一种是在python2.6版本后新增的str.format()
函数。
第一种类似C语言风格的方式:
>>> print('My name is %s,age %d' % ('walter',24))
My name is walter,age 24
python字符串格式化符号:
符号 | 描述 |
---|---|
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整数 |
%o | 格式化无符号八进制数 |
%x,%X | 格式化无符号十六进制数 |
%f | 格式化浮点数,可指定小数点后精度 |
%e,%E | 用科学计数法格式化浮点数 |
%g,%G | %f和%e的简写 |
%c | 单个字符或整数转化为字符 |
%r | 用repr()转化为字符串 |
%a | 用ascii()转换为字符串 |
>>> print('My name is %c,age %o' % ('小',24))
My name is 小,age 30
>>> print('My name is %s,age %x' % ('小明',24))
My name is 小明,age 18
>>> print('My name is %s,age %e' % ('小明',24))
My name is 小明,age 2.400000e+01
>>> print('My name is %s,age %u' % ('小明',+24))
My name is 小明,age 24
>>> print('My name is %r,age %f' % ('小明',24))
My name is '小明',age 24.000000
>>> print('My name is %a,age %d' % ('小明',24))
My name is '\u5c0f\u660e',age 24
格式化操作符辅助指令:
符号 | 功能 |
---|---|
num | %d,%o,%x中间定义数字,以定义数字的宽度或者小数点精度 |
- | 左对齐 |
+ | 正负号 |
# | 在八进制数前面显示'0o',在十六进制前面显示'0x'或者'0X' |
0 | 显示的数字前面填充0,而不是默认的空格 |
%% | 输出单一的% |
m.n | 最小总宽度m,小数点后的n倍数(只对%f生效) |
>>> print('num is %10d' % (24)) #宽度为10的十进制,默认在左侧加空格
num is 24
>>> print('num is %-10d' % (24)) #左对齐
num is 24
>>> print('num is %010d' % (24)) #宽度为10位,位数不足在前面补零
num is 0000000024
>>> print('num is %#d' % (24)) #以十进制显示,没有前缀
num is 24
>>> print('num is %#o' % (24)) #以八进制显示
num is 0o30
>>> print('num is %#x' % (24)) #以十六进制显示
num is 0x18
>>> print('num is %%%d' % (24)) #显示%号
num is %24
>>> print('num is %4.2f' % (123)) #小数点后的位置只有用在%f浮点数时才生效
num is 123.00
------------------------------------
**第二种format格式化函数:** 基本语法是通过`{}`和`:`来代替以前的`%`。 fortmat函数可以接受不限个参数,位置可以不按顺序。
format的括号里可以跟位置参数,也可以跟关键字参数
顺序对应
>>> 'my name is {},age {}'.format('walter',24)
my name is walter,age 24
>>> 'my name is {0},age {1}'.format('walter',24)
'my name is walter,age 24'
>>> 'my name is {1},age {0}'.format('walter',24) #顺序可以调整
'my name is 24,age walter'
>>> 'my name is {name},age {age}'.format(name='walter',age=24)
'my name is walter,age 24'
可以在{}占位符中用字典和列表的下标操作,还可以用模块的子模块或子属性。
>>> import sys
>>> 'My {service[server]} runs on {sys.platform}'.format(sys=sys,service = {'server': 'jupyter'})
'My jupyter runs on linux'
>>> sitt = {'name':'walter','age':24}
>>> 'my name is {name},age {age}'.format(**sitt)
'my name is walter,age 24'
>>> listt = ['walter',24]
>>> 'my name is {0[0]},age {0[1]}'.format(listt)
'my name is walter,age 24'
sys.platform
:系统sys模块的platform函数**sitt
:位置参数
格式化操作符辅助指令:
符号 | 功能 |
---|---|
^ | 居中对齐 |
|右对齐,默认对齐方式
<|左对齐
:|后面带填充的字符,只能是一个字符,不指定则默认是用空格填充。相当于第一种的%号。
+|正数前显示
-|负数前显示
空格|在正数前加空格
>>> 'num is {:10d}'.format(100) #默认右对齐
'num is 100'
>>> 'num is {:^10d}'.format(100) #居中对齐
'num is 100 '
>>> 'num is {:<10d}'.format(100) #左对齐
'num is 100 '
>>> 'num is {:010d}'.format(100) #填充0
'num is 0000000100
>>> 'num is {:#^10d}'.format(100) #可以使用多种填充字符,填充可以是特殊字符和字母
'num is ###100####'
>>> 'num is {:3.2f}'.format(22.333) #浮点数
'num is 22.33'