在python中将对象转换为字符串时,我看到了两种不同的习语:
答:mystring = str(obj)
B:mystring = "%s" % obj
这两者有区别吗? (阅读Python文档,我怀疑不会,因为后一种情况会隐式调用str(obj)
将obj
转换为字符串。
如果是,我什么时候应该使用哪个?
如果不是,我应该选择哪一个"好" python代码? (从蟒蛇哲学"明确隐含",A会被认为是更好的?)
答案 0 :(得分:16)
第二个版本做得更多。
%s
运算符对其插值的值调用str()
,但它还必须首先解析模板字符串,以便首先找到占位符。
除非您的模板字符串包含更多文本,否则要求Python在"%s" % obj
表达式上花费更多周期是没有意义的。
然而,矛盾的是,实际上,str()
转换在查找名称str()
时速度较慢,并且推动堆栈调用函数比字符串解析需要更多时间:
>>> from timeit import timeit
>>> timeit('str(obj)', 'obj = 4.524')
0.32349491119384766
>>> timeit('"%s" % obj', 'obj = 4.524')
0.27424097061157227
您可以通过首先将str
绑定到本地名称来恢复大部分差异:
>>> timeit('_str(obj)', 'obj = 4.524; _str = str')
0.28351712226867676
对于大多数Python开发人员来说,使用字符串模板选项会让人感到困惑,因为str()
更加直截了当。除非你有一个能够进行大量字符串转换的关键部分,否则请坚持使用该功能。