Python

时间:2016-09-23 16:14:32

标签: python python-2.7

在python中将对象转换为字符串时,我看到了两种不同的习语:

答:mystring = str(obj)

B:mystring = "%s" % obj

这两者有区别吗? (阅读Python文档,我怀疑不会,因为后一种情况会隐式调用str(obj)obj转换为字符串。

如果是,我什么时候应该使用哪个?

如果不是,我应该选择哪一个"好" python代码? (从蟒蛇哲学"明确隐含",A会被认为是更好的?)

1 个答案:

答案 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()更加直截了当。除非你有一个能够进行大量字符串转换的关键部分,否则请坚持使用该功能。