0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

科普:Python函数默认返回 None 的原因

如意 来源:Python猫 作者:豌豆花下猫 2020-08-17 11:39 次阅读

Python 有一项默认的做法,很多编程语言都没有——它的所有函数都会有一个返回值,不管你有没有写 return 语句。

本文出自“Python为什么”系列,在正式开始之前,我们就用之前讨论过的 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 值返回(出自:compile.c):

也就是说,如果定义的函数没有返回值,Python 解释器就会(强行地)默认给我们注入一段返回逻辑!

对于解释器的这种附赠的服务,大家是觉得很贴心,还是嫌弃它多事呢?

这样的做法似乎没多少好处,但似乎也没有坏处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程
    +关注

    关注

    88

    文章

    3591

    浏览量

    93592
  • python
    +关注

    关注

    56

    文章

    4782

    浏览量

    84449
  • 解释器
    +关注

    关注

    0

    文章

    103

    浏览量

    6494
收藏 人收藏

    评论

    相关推荐

    Python常用函数大全

    Python 世界里,有一些宝藏函数和模块,它们可以让你编程更轻松、代码更高效。这篇文章将带你一一认识这些神器,让你的开发生活瞬间轻松不少!
    的头像 发表于 10-27 17:20 174次阅读

    从TCP侦察回函数返回错误代码是什么意思?

    嗨,我想知道从TCP侦察回函数返回错误代码是什么意思。它有时会得到错误代码(-11)或错误代码(-9)。我想这就是我无法连接到TCP服务器的原因。非常感谢。
    发表于 07-11 07:49

    STM32H7在USBH_Get_DevDesc()函数一直返回失败的原因

    在USBH_Get_DevDesc()函数一直返回失败,可以正常识别U盘的插入和移除,什么原因
    发表于 03-11 06:55

    函数发生器的作用,概念要点是什么

    概念。 理解迭代器和可迭代对象: 在深入探讨函数生成器之前,我们需要先了解迭代器和可迭代对象的概念。在Python中,迭代是一种访问集合元素的方式,无论集合的大小如何。迭代器是一个可以记住遍历位置的对象。可迭代对象是可以返回
    的头像 发表于 02-23 16:01 510次阅读

    python中open函数的用法详解

    python中open函数的用法详解 Python中的open()函数用于打开文件。它接受文件名和模式作为参数,并返回一个文件对象。文件对象
    的头像 发表于 01-30 15:31 1948次阅读

    round函数公式怎么输入

    , ndigits) 参数说明: number:要进行四舍五入的数字。 ndigits:指定保留的小数位数。这是一个可选参数,默认为0。 根据ndigits的不同取值,round函数的行为略有不同: 当ndigits为0时,round
    的头像 发表于 01-15 17:27 893次阅读

    split在python中的用法

    split在python中的用法 split()是Python中一个非常常用的字符串函数,它能够根据指定的分隔符将一个字符串分割成多个子字符串,并返回一个包含这些子字符串的列表。本文将
    的头像 发表于 12-25 15:12 1966次阅读

    if函数三个条件怎么填

    IF函数是Excel中最常用的函数之一,它根据一个逻辑条件的返回结果来决定应该执行哪一个动作。在Excel中使用IF函数可以实现复杂的逻辑判断,应用范围广泛。本文将详细解析IF
    的头像 发表于 12-03 10:28 3447次阅读

    vlookup函数显示公式不显示结果

    VLOOKUP函数是Excel中非常常用的一种函数,用于在一个数据范围内查找某个值,并返回相应的结果。但有时候,在使用VLOOKUP函数时会遇到公式不显示结果的问题。本文将为您详细解释
    的头像 发表于 12-01 11:22 2.2w次阅读

    vlookup函数无效的原因

    vlookup 函数无效可能有以下几个原因: 数据类型不匹配:vlookup 函数要求查找值和数据表中的对应值必须为相同的数据类型。例如,如果查找值为文本类型,但数据表中的对应值为数值类型
    的头像 发表于 12-01 11:20 1.8w次阅读

    XLOOKUP函数怎么使用

    XLOOKUP函数是Excel 365版本中新增的一项非常强大的查找和引用函数。它可以用于查找表格中的值,并返回相关信息。本文将介绍XLOOKUP函数的使用方法以及其在实际工作中的应用
    的头像 发表于 12-01 10:54 2150次阅读

    input函数会将接收的数据以什么类型返回

    nput函数会将接收的数据以字符串类型返回。 input函数Python内置函数之一,它用于从用户处获取输入。当程序运行到input
    的头像 发表于 11-30 10:09 3216次阅读

    python中计算排列组合的函数有哪些

    Python中,有多种可以用于计算排列组合的函数和模块。下面将详细介绍一些常用的函数和模块,并提供详实和细致的说明。 math模块: Python的math模块提供了一些计算排列组合
    的头像 发表于 11-29 16:33 3472次阅读

    查看python安装路径的方法

    。 方法一:使用Python自带安装程序的默认路径 Python的安装程序通常会将Python解释器安装在默认的路径中
    的头像 发表于 11-29 14:54 1.1w次阅读

    不属于python的内置函数

    Python是一种高级编程语言,它提供了许多内置函数,可以帮助开发人员更轻松地处理各种任务。但是,在Python中并非所有的函数都是内置函数
    的头像 发表于 11-29 14:27 1388次阅读