加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

这两个Python语句有什么区别?

发布时间:2020-12-16 23:54:23 所属栏目:Python 来源:网络整理
导读:我正在深入研究Python的WiringPi-Python代码,我找到了几个像这样的块: def wiringPiSetup(): return _wiringpi2.wiringPiSetup()wiringPiSetup = _wiringpi2.wiringPiSetup 这对我来说有点令人费解,因为我觉得这个: def wiringPiSetup(): return _wiringpi

我正在深入研究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)则不会生成替换行.

据推测原始功能保留在原位,以便自动完成工具可以使用功能签名.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读