我正在研究Python的WiringPi-Python的代码,发现了几个类似的代码块:

def wiringPiSetup():
  return _wiringpi2.wiringPiSetup()
wiringPiSetup = _wiringpi2.wiringPiSetup

这让我有些困惑,因为我认为这是:
def wiringPiSetup():
  return _wiringpi2.wiringPiSetup()

将产生与以下结果完全相同的结果:
wiringPiSetup = _wiringpi2.wiringPiSetup

我知道第一个是声明一个新函数,第二个是对原始函数的引用,但是在我做的测试中,我发现它们是完全等效的。看这里:
>>> def a():
...     return 4
...
>>> def a1():
...     return a()
...
>>> a2 = a
>>>
>>> a1()
4
>>> a2()
4

那么,为什么在任何一个都足够的情况下将WiringPi-Python放在两者中呢?

顺便说一句:
  • 我正在使用Python 2.7.3
  • 这是我看到的文件:here
  • 最佳答案

    该文件由SWIG生成。函数定义确实是“死代码”,因为您可以完全删除函数定义,而只需保留赋值即可。

    由于代码是自动生成的,因此代码效率较低。 SWIG function that generates this code指出:

    if (Getattr(n, "feature:python:callback") || !have_addtofunc(n)) {
      /* If there is no addtofunc directive then just assign from the extension module (for speed up) */
      Printv(f_dest, name, " = ", module, ".", name, "\n", NIL);
    }
    

    因此第二个任务就是替换生成的Python函数以加快使用速度。

    如果该函数在生成时要添加其他Python代码(当存在文档字符串,前缀或附加值时have_addtofunc()为true),则不会生成替换行。

    大概原始功能保留在原处,以便自动完成工具可以使用功能签名。

    关于python - 这两个Python语句有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23296612/

    10-11 01:02
    查看更多