在线客服
扫描二维码
下载博学谷APP
扫描二维码
关注博学谷微信公众号
Python 函数默认返回None是什么原因?定义的函数没有返回值,Python 解释器就会强行地默认给注入一段返回逻辑!实际上 Python 中有很多行为都是隐性的。
Python 有一项默认的做法,很多编程语言都没有,所有函数都会有一个返回值,不管有没有写 return 语句。
在正式开始之前,用pass语句 和 …对象 作为例子,看下 Python 的函数返回值:

定义的两个函数都没有写任何的 return 语句,但是在函数调用后,都能取到一个返回值。执行效果跟直接写 return 语句相比,是完全相同的:

这 4 个例子属于两种类型:一种没有写 return,但是都有隐藏的 return 返回值;一种写了 return,而且实际也有返回值。也就是说,后者在语义和行为上表现一致,前者虽然在语义上缺失,但是却有实际的行为和结果;后者的行为是显性的,前者却是隐性的。
《Python之禅》中有一句“显性胜于隐性(Explicit is better than implicit)”,但是,出于简洁和便利的考虑(Simple is better than complex),实际上 Python 中有很多行为都是隐性的,会把一些在语法层面的事交给解释器去完成。
真值判断 是隐性的行为,本文前两个例子也是如此。
使用dis查看字节码,就可以看到其背后的变化:

在这个对比图中,可以看出上述 4 个函数的解释器指令一模一样!
不管有没有写 return,它们都会执行 return 的逻辑,而且默认的返回值就是 None。
那么问题来了:Python 的函数为什么能默认返回 None ?如何实现的?
答案就在解释器中,当 CPython 解释器执行到函数的最后一个代码块时,若发现没有返回值,它就会主动地加上一个 Py_None 值返回:

如果定义的函数没有返回值,Python 解释器就会(强行地)默认给我们注入一段返回逻辑!
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
什么是 cookie?cookie和session 有什么区别?
cookie 数据存放在客户的浏览器上,session 数据放在服务器上。cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行 cookie 欺骗,考虑到安全应当使用 session。session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
9297
2019-06-27 11:12:42
Python工程师常见面试题集锦--网络编程(1)
自从互联网诞生以来,基本上所有的程序都属于网络程序,也就需要设计到网络编程,在python中,就是在python程序本身这个进程内,链接别的服务器进程的通信端口进行通信。在Python程序员找工作的时候,京城被问到关于网络编程的问题。下面就和大家分享一下那些面试中经常出现的问题吧。
10932
2019-08-14 10:20:04
Python面试题scrapy和scrapy-redis的区别是什么?
Python面试题scrapy和scrapy-redis的区别是什么?为什么选择redis数据库?scrapy 是一个Python爬虫框架,爬取效率极高,具有高度定制性,但是不支持分布式。选择redis 数据库因为 redis支持主从同步,而且数据都是缓存在内存中的。
11442
2019-07-04 17:55:35
jQuery如何获取和设置元素属性?代码怎么写?
jQuery如何获取和设置元素属性?代码怎么写?通过val方法来获取value属性和设置value属性,使用prop方法设置标签的其它属性也可以。
6402
2022-01-05 14:02:28
连接查询自连接的SQL语句怎么写?
连接查询自连接的SQL语句怎么写?自连接查询左表和右表是同一个表,根据连接查询条件查询两个表中的数据。学习自连接要能够写出自连接查询的SQL语句。
9766
2022-01-19 11:53:11
