Python中的str函数和百分比运算符之间是否存在差异?

Ste*_*ler 9 python python-2.7

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

A: mystring = str(obj)

B: mystring = "%s" % obj

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

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

如果不是,在"好"的python代码中我应该选择哪一个?(从蟒蛇哲学"显式过度隐含",A会被认为是更好的吗?)

Mar*_*ers 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
Run Code Online (Sandbox Code Playgroud)

您可以通过首先绑定str到本地名称来恢复大部分差异:

>>> timeit('_str(obj)', 'obj = 4.524; _str = str')
0.28351712226867676
Run Code Online (Sandbox Code Playgroud)

对于大多数Python开发人员来说,使用字符串模板选项会让人感到困惑,因为str()它更加直截了当.除非你有一个能够进行大量字符串转换的关键部分,否则请坚持使用该功能.