Python format

format使用

最近公司推崇测试和开发不分家,测试也需要将脚本写得更加鲁棒性,更好维护,一位测试的同事没怎么写过python,来问我一个问题:

def demo(a, b, c, d):
    print("\
    This is a's name: %s\n\
    Please change  b's name: %s\n\
    This is c's name: %s\n\
    This is d's name: %s\n" %(a, b, c, d))
demo("a", "b", "c", "d")

这样一个函数如何更好维护(看来测试美眉也是很爱学习的嘛😝,实际上该函数有十多个参数用于构建该字符串),我思考了一下,想到可以用format来优化一下代码:

def demo(a, b, c, d):
    command = "\n".join([
        "This is a's name:{a}".format(a=a),
        "Please change b's name: {b}".format(b=b),
        "This is c's name: {c}".format(c=c),
        "This is d's name: {d}".format(d=d),
    ])
    print(command)
demo("apple", "banana", "candy", "dog")

测试美眉看到重构之后的效果表示非常开心地走开了。但是她走之后,我想难道这样format就被她掌握了,岂不是太小瞧format了,于是又重新研究了一波format,简单整理了一下。

参数传递方式

默认方式:默认方式就是将format后的参数依次插入到字符串相应位置

>>> "a:{},b:{}".format("apple","banana")
'a:apple,b:banana'

索引方式:索引就是利用字符串中的{index}对应format中的参数,分别插入到字符串相应位置:

>>> "a:{1},b:{0}".format("apple","banana")
'a:banana,b:apple'
>>> "a:{0},b:{1}".format("apple","banana")
'a:apple,b:banana'
>>> "a:{0[1]},b:{1}".format(["apple","apple2"],"banana")
'a:apple2,b:banana'

key-value:类似函数传参方式:

>>> "a:{b},b:{a}".format(a="apple", b="banana")
'a:banana,b:apple'
>>> "a:{a},b:{b}".format(a="apple", b="banana")
'a:apple,b:banana'

填充方法:下面分别是左对齐、中间对齐和右对齐三种方式,具体格式是:[填充字符][对齐方式 <^>][宽度]

>>> "left:{a:*<10}, mid:{a:*^10}, right:{a:*>10}".format(a="5")
'left:5*********, mid:****5*****, right:*********5'

当然format同样支持格式化输出:

format_spec ::=  [[fill]align][sign][#][0][width][,][.precision][type]
fill        ::=  <any character>
align       ::=  "<" | ">" | "=" | "^"
sign        ::=  "+" | "-" | " "
width       ::=  integer
precision   ::=  integer
type        ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

整数输出类型

字符 含义
b 以二进制格式输出
c 将整数转换成对应的 unicode 字符
d 以十进制输出(默认选项)
o 以八进制输出
x 以十六进制小写输出
X 以十六进制大写输出
n 与 d 相同,但使用当前环境的分隔符来分隔每3位数字

十进制浮点数输出类型

字符 含义
e 指数标记;使用科学计数法输出,用e来表示指数部分,默认 precision 为6
E 与 e 相同,但使用大写 E 来表示指数部分
f 以定点形式输出数值,默认 precision 为6
F 与 f 相同,转换nanNANinfINF
g 通用格式;对于给定的 precision p >= 1,取数值的p位有效数字,并以定点或科学计数法输出(默认选项)
G 通用格式;与 g 相同,当数值过大时使用 E 来表示指数部分
n 与 g 相同,但使用当前环境的分隔符来分隔每3位数字
% 百分比标记;使用百分比的形式输出数值,同时设定 f 标记
>>> "a:{a:.2f},b:{a:.3%},c:{a:*<10.3f},d:{a:.4e}".format(a=12.333333)
'a:12.33,b:1233.333%,c:12.333****,d:1.2333e+01'

小结

format还是非常强大的,还具有替换功能,这里没有列出来。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,877评论 0 38
  • 自python2.6开始,新增了一种格式化字符串的函数str.format(),可谓威力十足。那么,他跟之前的%型...
    古佛青灯度流年阅读 652评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,845评论 18 139
  • 怪博士是最伟大的武器学家,它为城市做出了许多的贡献。一天怪博正在为国家研究新的武器,突然,白光一闪,UFO出现...
    墨迹的美阅读 235评论 0 0
  • 爸妈问了我很多次,要不要养只狗,我都说不要。光是妈妈就试探地问了好几次,要不要去抓一只可爱点的,听话点的小狗来看家...
    陈盏阅读 413评论 0 1