【发布时间】:2014-04-25 15:00:22
【问题描述】:
我正在研究 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,也不知道为什么它会生成这样的代码。
-
如果后来由于某种原因有人做了这样的事情会发生什么:
_wiringpi2.wiringPiSetup = newfunc?如果你调用wiringPiSetup的函数版本,你可能会得到不同的结果。 -
@acushner 请记住,在 Python 中分配只是更改事物的名称。您的第一个示例会将
_wiringpi2.wiringPiSetup重命名为newfunc并执行newfunc所做的任何事情。如果您仍然有一个引用wiringPiSetup原始定义的名称,它将表现出原始行为。
标签: python python-2.7 swig