在python中将对象转为字符串时,看到了两种不同的成语:
A: mystring = str(obj)
B: mystring = "%s"% obj
这两者有区别吗? (阅读 Python 文档,我怀疑不会,因为后一种情况会隐式调用 str(obj)
以将 obj
转换为字符串。
如果是,我应该什么时候使用哪个?
如果不是,在“好的”python 代码中我应该更喜欢哪一个? (从 python 哲学“显式优于隐式”,A 会被认为是更好的吗?)
最佳答案
第二个版本做了更多的工作。
%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
绑定(bind)到本地名称来恢复大部分差异:
>>> timeit('_str(obj)', 'obj = 4.524; _str = str')
0.28351712226867676
对于大多数 Python 开发人员来说,使用字符串模板选项会让人感到困惑,因为 str()
要简单得多。坚持使用该函数,除非您有一个执行大量字符串转换的关键部分。
关于python - Python 中的 str 函数和百分比运算符之间有区别吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39665286/