【python】实现输出格式参数化小技巧

【起因】:看见别人一段代码(如下图),没想到格式化还可以这样用,于是研究了一下,发现对格式化输出了解的太少,特此总结下

【总结】:

python格式化字符串有%和{}两种格式化控制符.

一、字符串格式控制%[(name)][flag][width][.][precision]type

name:可为空,数字(占位),命名(传递参数名,不能以数字开头)以字典格式映射格式化,其为键名

flag:标记格式限定符号,包含+-#和0,+表示右对齐(会显示正负号),-左对齐,前面默认为填充空格(即默认右对齐),0表示填充0,#表示八进制时前面补充0,16进制数填充0x,二进制填充0b

width:宽度(最短长度,包含小数点,小于width时会填充)

precision:小数点后的位数,与C相同

type:输入格式类型,请看附表

二、format_spec格式{[name][:][[fill]align][sign][#][0][width][,][.precision][type]}

{}包裹name命名传递给format以命名=值 写法,非字典映射

fill : 表示可以填写任何字符

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

sign : 表示符号, +表示正号, -表示负号

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

precision :表示小数保留位数

type =  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"  #type是输出数字值是的表示方式,比如b是二进制表示;比如E是指数表示;比如X是十六进制表示
【解析】:现在再来看"[%%-%ds]"表示的就是格式化输出左对齐 n个长度(即"[%-ns]",n作为变量继续"[%%-%ds]") 

>>> def progress(percent,width=50):
    if percent>=100:
        percent = 100
    show_str = ('[%%-%ds]'%width)%(int(width*percent/100)*"#")
    print('\r%s %d%%'%(show_str,percent),end=' ')

    
>>> progress(100,50)
[##################################################] 100%  

虽然使用format也可以实现,但作为一个小技巧也是很拍案惊觉的!!!

发布了11 篇原创文章 · 获赞 6 · 访问量 2308

猜你喜欢

转载自blog.csdn.net/qq525003138/article/details/101480927