当一个对象转换为在python字符串,只见两个不同的成语str函数和百分比运营商之间的差:是否有在Python
答:mystring = str(obj)
B:mystring = "%s" % obj
是这两者有什么区别? (阅读Python文档,我怀疑没有,因为后一种情况下将隐含调用str(obj)
到obj
转换为字符串。
如果是的话,我应该使用哪一个?
如果没有,哪一个我应该在“好”的Python代码更喜欢哪个?(从Python的哲学“明确了隐”,A将被认为是更好的?)
当一个对象转换为在python字符串,只见两个不同的成语str函数和百分比运营商之间的差:是否有在Python
答:mystring = str(obj)
B:mystring = "%s" % obj
是这两者有什么区别? (阅读Python文档,我怀疑没有,因为后一种情况下将隐含调用str(obj)
到obj
转换为字符串。
如果是的话,我应该使用哪一个?
如果没有,哪一个我应该在“好”的Python代码更喜欢哪个?(从Python的哲学“明确了隐”,A将被认为是更好的?)
第二个版本做更多的工作。
的%s
运营商的要求str()
它插值的值,但它也有t o首先解析模板字符串,首先找到占位符。
除非您的模板字符串包含更多文本,否则要求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开发者,使用字符串模板选项将是为混乱210更直接。坚持这个功能,除非你有一个关键部分进行了大量的字符串转换。
我会去的第一个,但很好的问题(+1) - 我相信一些专业pythonistas将非常愿意回答:) – Jan