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

总结

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

相关文章

  • python目标检测数据增强的代码参数解读及应用

    python目标检测数据增强的代码参数解读及应用

    这篇文章主要为大家介绍了python目标检测数据增强的代码参数解读及应用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Python 列表映射后的平均值

    Python 列表映射后的平均值

    这篇文章主要介绍了Python 列表映射后的平均值,下面文章将围绕Python 列表映射后的平均值得相关资料展开详细内容,需要的朋友可以参考一下
    2021-11-11
  • python的继承详解

    python的继承详解

    这篇文章主要介绍了Python中继承的的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2021-10-10
  • Python使用jpype的踩坑记录

    Python使用jpype的踩坑记录

    Pype是一个能够让 python 代码方便地调用 Java 代码的工具,这篇文章主要来和大家分享一下Python使用jpype会踩的一些坑,希望对大家有所帮助
    2023-06-06
  • pandas 实现字典转换成DataFrame的方法

    pandas 实现字典转换成DataFrame的方法

    今天小编就为大家分享一篇pandas 实现字典转换成DataFrame的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python函数基础

    Python函数基础

    这篇文章主要从函数开始介绍展开Python函数,以最基本的函数定义方法描述,需要的朋友可以参考下文简单的介绍
    2021-08-08
  • 使用Python实现MP3格式转化

    使用Python实现MP3格式转化

    这篇文章主要为大家详细介绍了如何使用Python实现MP3格式转化为wav,flac和ogg等,文中的示例代码讲解详细,有需要的小伙伴可以参考一下
    2025-01-01
  • Python 使用生成器代替线程的方法

    Python 使用生成器代替线程的方法

    这篇文章主要介绍了Python 使用生成器代替线程的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • Python如何通过内存管理提升程序执行效率

    Python如何通过内存管理提升程序执行效率

    Python提供了自动内存管理的功能,但是如果不小心使用,可能会导致内存泄漏和性能问题,所以巧妙使用内存管理是提高Python执行效率的关键,下面就来和大家仔细讲讲Python的内存管理技巧吧
    2023-06-06
  • 浅谈Python生成器generator之next和send的运行流程(详解)

    浅谈Python生成器generator之next和send的运行流程(详解)

    下面小编就为大家带来一篇浅谈Python生成器generator之next和send的运行流程(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05

最新评论