python format的特殊用法

537 阅读2分钟

Python标准库:内置函数format(value[, format_spec])

平时一般用到的是str.format(),但是在某次学习tcp粘包时候遇到如下用法,感到疑惑,特此记录

len_str = format(len(bs), "04d") # 定长4位

本函数把值value按format_spec的格式来格式化,然而函数解释format_spec是根据value的类型来决定的,不同的类型有不同的格式化解释。当参数format_spec为空时,本函数等同于函数str(value)的方式。

其实本函数调用时,是把format(value, format_spec)的方式转换为type(value).format(format_spec)方式来调用,因此在value类型里就查找方法__format__(),如果找不到此方法,就会返回异常TypeError。

其中format_spec的编写方式如下形式:

format_spec ::=  [[fill]align][sign][#][0][width][,][.precision][type]

fill        ::=  

align       ::=  "<" | ">" | "=" | "^"

sign        ::=  "+" | "-" | " "

width       ::=  integer

precision   ::=  integer

type        ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

fill是表示可以填写任何字符。

align是对齐方式,<是左对齐, >是右对齐,^是居中对齐。

sign是符号, +表示正号, -表示负号。

width是数字宽度,表示总共输出多少位数字。

precision是小数保留位数。

type是输出数字值是的表示方式,比如b是二进制表示;比如E是指数表示;比如X是十六进制表示。

例子:

#format()
 
print(format(2918))
print(format(0x500, 'X'))
print(format(3.14, '0=10'))
print(format(3.14159, '05.3'))
print(format(3.14159, 'E'))
print(format('test', '<20'))
print(format('test', '>20'))
print(format('test', '^20'))

结果输出如下:

2918

500

0000003.14

03.14

3.141590E+00

test

test

test

———————————————— 原文链接:blog.csdn.net/caimouse/ar…