反引号是不推荐使用的别名
repr()。不再使用它们,该语法已在Python 3.0中删除。
使用反引号似乎快于使用
repr(num)或
num.__repr__()在版本2.x中 我猜这是因为分别需要在全局名称空间(for
repr)或对象的名称空间(for
__repr__)中进行额外的字典查找。
使用该
dis模块证明了我的假设:
def f1(a): return repr(a)def f2(a): return a.__repr__()def f3(a): return `a`
拆解节目:
>>> import dis>>> dis.dis(f1) 30 LOAD_GLOBAL 0 (repr) 3 LOAD_FAST 0 (a) 6 CALL_FUNCTION 1 9 RETURN_VALUE>>> dis.dis(f2) 60 LOAD_FAST 0 (a) 3 LOAD_ATTR 0 (__repr__) 6 CALL_FUNCTION 0 9 RETURN_VALUE >>> dis.dis(f3) 90 LOAD_FAST 0 (a) 3 UNARY_ConVERT 4 RETURN_VALUE
f1涉及到的全局查找
repr,
f2的属性查找
__repr__,而反引号运算符在单独的操作码中实现。由于没有字典查找(
LOAD_GLOBAL/
LOAD_ATTR)和函数调用(
CALL_FUNCTION)的开销,因此反引号会更快。
我猜想,Python专家认为
repr()不值得为此单独进行一个低级操作,并且同时使用
repr()反引号会违反该原理
“应该有一种-最好只有一种-显而易见的方法”
因此该功能已在Python 3.0中删除。



