python - Python 中的 str 函数和百分比运算符之间有区别吗

标签 python python-2.7

在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/

相关文章:

Python读取SAS生成的XML类型.xls文件

python - 为 python 2.7 安装 mod_wsgi 时出错

python - 当列等于特定值时,将新值插入新列 - Python

python - 使用 beautifulsoup 正则表达式不会像预期的那样匹配

python - 在 Lambda python 查询 DynamoDb 中不返回任何数据

python - Pandas 条形图呈灰色

python - 将正则表达式模式作为系统参数传递给 Python 脚本

mysql - Cloud SQL 访问被拒绝

python - 如何明智地连接多个列表元素

macos - 无法导入lightblue模块python