注意一点就是我们Python的函数return之后,比方说它定义了一个局部变量,当出了这个函数,这个局部变量的引用计数会减1,在C语言当中出了函数作用域的话局部变量是直接被销毁的,而我们Python并没有局部变量这个概念,我们都是引用,所以只要出了作用域,引用就会减1。
那么问题就来了,减1是不是就没了,我们return出来之后是不是就不能访问了?并不是。
在Python的return当中,它会把它再加1,首先它出来,先调return函数给它加了1,它本来引用计数是1,我们return的时候把这个变量re给它加了1,那就变成了2,整个退出的时候它又会减1,此时re的引用计数就是1,在外面还可以访问到这个变量re。
所以你要知道这一点,Python的函数是可以直接返回的,里面的局部变量都可以返回的,这一点不同于C语言。
由于Python内部都是引用,它会把引用计数加1,所以这个return不是那么简单的,你要知道这一点,它在内部为什么能用,它会把引用计数加1。
为什么要说这些呢?当你自己做一个,把C语言的函数传给Python的时候,你要做同样的事情,你是通过Python的接口申请了一块空间,那你一样的要把引用计数加1,不然的话出了这个函数的作用域,这个空间就销毁掉了,所以要把它加1,在外部才能保证访问。
能支持return多个值,相当于return了一个元组,可以赋给多个值,并不建议使用这种return方式,可读性会下降,一些新特性能不用尽量不用,但是你要知道这种特性,要能看得懂别人的代码。
在我们局部变量生成的空间,在外部是可以访问的,因为return会把它的引用计数加1。