我正在深入研究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在它们中任何一个都足够的时候放了?
BTW:
>我正在使用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,".","\n",NIL);
}
所以第二个赋值就是替换生成的Python函数来加速使用.
如果函数在生成时添加了额外的Python代码(当存在docstring,prepend或append值时,has_addtofunc()为true)则不会生成替换行.
据推测原始功能保留在原位,以便自动完成工具可以使用功能签名.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。