Python str()与'' - 哪个更好?

9

我曾经使用过一些示例代码,使用str()而不是我平常使用的''来表示空字符串。使用str()有什么优势吗?例如:

 # .....
 d = dict()
 # .....
 # .....
 if v is None:
     d[c.name] = str()
 else:
     d[c.name] = v

它似乎更慢了。

$ python -m timeit "'.'.join(str(n)+'' for n in range(100))"
100000 loops, best of 3: 12.9 usec per loop
$ python -m timeit "'.'.join(str(n)+str() for n in range(100))"
100000 loops, best of 3: 17.2 usec per loop

1
如果你使用了 from __future__ import unicode_literals(不好的想法),在 Python 2 中会有不同的效果。否则,请不要使用。 - Ry-
1
附注:许多偏爱使用 '' 的原因也适用于使用 {} 而不是 dict(){} 具有直接解释器支持,绕过相对昂贵的查找和调用机制,而采用单个专用的 BUILD_MAP 操作码(在本地微基准测试中,dict(){} 慢约4倍)。 - ShadowRanger
2个回答

7
唯一的优点是,如果在本地重新定义了str,那么str()将使用该定义,而''不会。否则,它们是等效的(尽管不相等,因为编译器在一个情况下会发出函数调用,在另一个情况下会发出文字)。

7
注意:从性能的角度来看,特别是对于像 '' 这样的不可变常量,字面值要快得多(在本地微基准测试中少约10倍时间)。 '' 存储在函数常量中,加载它实际上只是在 C 数组中查找并增加引用计数; 使用 str() 则涉及内置查找(检查全局 dict,然后是内置 dict),然后是通用调用字节码(最终通过对象构造的所有繁琐步骤只为意识到需要空字符串并返回它)。 使用 ''/"" - ShadowRanger

6
参考Python手册str()用于以下情况:
  1. 您想要对象的字符串表示形式
  2. 您想将bytes(或其他字节序列,如bytearray)转换为字符串
在所有其他情况下,您应该使用''
一个空的str()调用返回一个空字符串是副作用而不是方法的预期主要用途。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接