一个函数在输入时,带括号与不带括号的区别:函数变量与函数执行。

很多人刚开始学python的时候肯定遇到过很多问题,当你想执行一个函数的时候。可是发现函数并没有执行,解释器却给返回了一行奇怪的数据。举个栗子。

def func():
    print('Hello world')


#然后分别用带括号和不带括号去调用他

func
func()

我们先定义一个简单的函数,然后用带括号和不带括号的方式分别去调用它。

得到的结果为

>>> func


>>> func()
hello world
 

这是为什么呢?

先说结论,其实就跟我的标题一样,我们如果不带括号只输入函数名,相当于你只输入了函数变量,那么返回的是变量地址。如果你带上括号输入,那么就相当于你输入了函数执行,计算机会执行这段指令。

然后让我们来简单分析一下为什么会这样。

           要说清楚这个问题就要从python函数的运行原理来说,python本身是一种脚本语言,我们写好的程序在执行前会被解释器进行编译成中间码(pyc)这些中间码会被存储在虚拟内存空间中,这个虚拟内存空间会分为数据段,函数段等等,我们定义的函数就是存放在函数段。既然他是存放在内存中,那么他一定就有内存地址。那么我们的这个函数名其实就是对应的这个内存地址,当我们只输入函数名的时候机器只是调用了这块内存空间的地址,所以我们可以看到上面的输出结果中了一长串地址。 而当我们输入函数加上(),那么解释器会生成一条call指令,虚拟机在接收到这条指令时就会按照内存地址去执行这段代码。

        最后,对于没耐心看上面这段解释的朋友,记住一句话就行了, 不带括号就是函数变量,带括号就是函数执行。

你可能感兴趣的:(python,函数,python)