English 中文(简体)
什么用背书来指“灰色”解释者? 例: ......
原标题:What do backticks mean to the Python interpreter? Example: `num`
  • 时间:2009-11-04 11:00:38
  •  标签:

我坐在名单上的旁听,我是在另一个地点穿过这个小 s子:

return   .join([`num` for num in xrange(loop_count)])

我花了几分钟时间,试图复制(打字)的功能,然后才启用<条码>`num'。

那些性质的声明是什么? 从我能看到的情况来看,它相当于“天线”。 但当我发言的时候:

return   .join([str(num) for num in xrange(10000000)])

采用4.09秒,而:

return   .join([`num` for num in xrange(10000000)])

2.43秒。

两者都取得了相同的结果,但一个成果要慢得多。 这里正在发生什么?

ddly...repr()`num'低一些成果。 2.99秒 我正在使用A/63/12.6( t只尝试3.0)。

最佳回答

背书是<代码>_repr()的折成文。 Don t use them any more;the syntax在3时被拆除。

采用背书标准似乎比使用repr(num)num.__repr__( in edition 2.x. 我猜测,因为需要在全球名称空间(<代码>repr)或物体名称空间(<代码>_repr__)上进行额外的字典研究。


采用<条码> 模块证明我的假设:

def f1(a):
    return repr(a)

def f2(a):
    return a.__repr__()

def f3(a):
    return `a`

解体表明:

>>> import dis
>>> dis.dis(f1)
  3           0 LOAD_GLOBAL              0 (repr)
              3 LOAD_FAST                0 (a)
              6 CALL_FUNCTION            1
              9 RETURN_VALUE
>>> dis.dis(f2)
  6           0 LOAD_FAST                0 (a)
              3 LOAD_ATTR                0 (__repr__)
              6 CALL_FUNCTION            0
              9 RETURN_VALUE
>>> dis.dis(f3)
  9           0 LOAD_FAST                0 (a)
              3 UNARY_CONVERT
              4 RETURN_VALUE

<代码>f1涉及对<代码>repr的全球研究,f2,对<代码>_repr__进行归属研究,而背式操作者则以单独的代码实施。 由于对口腔看管没有间接费用(LOAD_GLOBAL />-LOAD_ATTR),也没有对功能电话(CALL_FUNCTION)进行管理,因此对应标准更为快捷。

我猜测这些民阵决定,为<代码>repr()单独开展低级业务并不值得使用,并且有<代码>repr(和背书>都违反了这一原则。

“应当有一、最好只有一种——显然的方式这样做”

因此,该特征在3时被拆除。

问题回答

Back语一般是非使用性的,在3号中。

值得的是:

  .join(map(repr, xrange(10000000)))

略高于我的背书。 但令人担心的是,这种选择可能过早。

我的猜测是num。 <代码>str__(),因此str(>必须第二次查询_repr__

背书直接参考<代码>_repr__。 如果是这样的话,那么使用<代码>repr()而不是背书,就应当给你同样的结果。





相关问题
热门标签