Python函数默认返回None的原因及分析

 更新时间:2024年11月25日 10:58:39   作者:黑马程序员官方  
Python函数默认返回None是因为在语法层面,解释器会主动地为没有return语句的函数添加一个返回逻辑,返回值为None

Python函数默认返回None原因

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 解释器就会(强行地)默认给我们注入一段返回逻辑!

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • pandas.dataframe中根据条件获取元素所在的位置方法(索引)

    pandas.dataframe中根据条件获取元素所在的位置方法(索引)

    今天小编就为大家分享一篇pandas.dataframe中根据条件获取元素所在的位置方法(索引),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • 基于Python自制视觉桌上冰球小游戏

    基于Python自制视觉桌上冰球小游戏

    这篇文章主要和大家分享一下如何使用 mediapipe+opencv 制作桌上冰球的交互式小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-04-04
  • Python进行图像变换和插值操作详解

    Python进行图像变换和插值操作详解

    这篇文章主要为大家详细介绍了Python进行图像变换和插值操作的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • python 实现在一张图中绘制一个小的子图方法

    python 实现在一张图中绘制一个小的子图方法

    今天小编就为大家分享一篇python 实现在一张图中绘制一个小的子图方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python中计算三角函数之cos()方法的使用简介

    Python中计算三角函数之cos()方法的使用简介

    这篇文章主要介绍了Python中计算三角函数之cos()方法的使用简介,是Python入门的基础知识,需要的朋友可以参考下
    2015-05-05
  • python更换国内镜像源三种实用方法

    python更换国内镜像源三种实用方法

    这篇文章主要给大家介绍了关于python更换国内镜像源三种实用方法的相关资料,更换Python镜像源可以帮助解决使用pip安装包时速度过慢或无法连接的问题,需要的朋友可以参考下
    2023-09-09
  • python 字典和列表嵌套用法详解

    python 字典和列表嵌套用法详解

    python中字典和列表的使用,在数据处理中应该是最常用的,今天通过多种场景给大家分享python 字典和列表嵌套用法,感兴趣的朋友一起看看吧
    2021-06-06
  • 使用Fabric自动化部署Django项目的实现

    使用Fabric自动化部署Django项目的实现

    这篇文章主要介绍了使用Fabric自动化部署Django项目的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 在Python中使用Protocol Buffers的详细介绍

    在Python中使用Protocol Buffers的详细介绍

    本文详细介绍了协议缓冲区(Protocol Buffers)在Python中的应用,包括其定义、序列化和解析过程,协议缓冲区是一种灵活且高效的自动化解决方案,本文包括了如何将地址簿应用程序的个人详细信息写入文件的示例代码,并提供了相应的下载和安装指导,感兴趣的朋友一起看看吧
    2024-10-10
  • Python通过poll实现异步IO的方法

    Python通过poll实现异步IO的方法

    这篇文章主要介绍了Python通过poll实现异步IO的方法,实例分析了poll方法实现异步IO的相关技巧,需要的朋友可以参考下
    2015-06-06

最新评论