当前位置: 首页 > 后端技术 > Python

为什么python函数默认返回None?

时间:2023-03-25 19:36:50 Python

作者:猫下豌豆花来源:Python猫Python有一个很多编程语言没有的默认做法——它的所有函数都会有返回值,不管你有没有return语句。本文来自“WhyPython”系列。在正式开始之前,我们以前面讨论过的pass语句和...object为例,看看Python函数是如何“无中生有”的:可以看出,我们定义的两个函数没有写return语句,但是调用函数后,可以获得返回值。它们的执行效果和直接写return语句是完全一样的:这4个例子分两种:一种是不写return,但是有隐藏的return返回值;一个写return,其实是有返回值的。也就是说,后者在语义和行为上是一致的,而前者虽然在语义上缺失,但有实际的行为和结果;后者的行为是显性的,而前者是隐性的。《Python之禅》中有一句话“Explicitisbetterthanimplicit(显式优于隐式)”,但是,为了简洁方便(Simpleisbetterthancomplex),其实Python中很多行为都是隐式的,一些语法层面的东西会交给解释器来完成。上一期的真值判断是隐性行为,本文前两个例子也是。使用dis查看字节码,可以看到背后的小动作:在这张对比图中,可以看出上面四个函数的解释器指令是完全一样的!不管return有没有写,都会执行return的逻辑,默认返回值为None。那么,问题来了:为什么Python函数可以默认返回None?它是如何实现的?答案在于解释器。当CPython解释器执行到函数的最后一个代码块时,如果发现没有返回值,会主动添加一个Py_None值返回(from:compile.c):即如果定义的函数没有返回一个值,Python解释器默认会(强行)给我们注入一个返回逻辑!对于口译员的这种额外服务,你是觉得很贴心,还是嫌弃麻烦?这样的做法,看似没有多大好处,但似乎也没什么坏处吧?有什么问题可以在后台留言或者评论哦!