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

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

3天内不再提示

Python 函数默认返回None的原因

如意 来源:博学园 作者:吾非鱼 2020-08-21 10:51 次阅读

Python 函数默认返回None是什么原因?定义的函数没有返回值,Python 解释器就会强行地默认给注入一段返回逻辑!实际上 Python 中有很多行为都是隐性的。

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

在正式开始之前,用pass语句 和 …对象 作为例子,看下 Python 的函数返回值:

Python 函数默认返回None的原因

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

Python 函数默认返回None的原因

这 4 个例子属于两种类型:一种没有写 return,但是都有隐藏的 return 返回值;一种写了 return,而且实际也有返回值。也就是说,后者在语义和行为上表现一致,前者虽然在语义上缺失,但是却有实际的行为和结果;后者的行为是显性的,前者却是隐性的。

《Python之禅》中有一句“显性胜于隐性(Explicit is better than implicit)”,但是,出于简洁和便利的考虑(Simple is better than complex),实际上 Python 中有很多行为都是隐性的,会把一些在语法层面的事交给解释器去完成。

真值判断 是隐性的行为,本文前两个例子也是如此。

使用dis查看字节码,就可以看到其背后的变化:

Python 函数默认返回None的原因

在这个对比图中,可以看出上述 4 个函数的解释器指令一模一样!

不管有没有写 return,它们都会执行 return 的逻辑,而且默认的返回值就是 None。

那么问题来了:Python 的函数为什么能默认返回 None ?如何实现的?

答案就在解释器中,当 CPython 解释器执行到函数的最后一个代码块时,若发现没有返回值,它就会主动地加上一个 Py_None 值返回:

Python 函数默认返回None的原因

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

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

    关注

    96

    文章

    2945

    浏览量

    66738
  • python
    +关注

    关注

    56

    文章

    4795

    浏览量

    84658
  • 解释器
    +关注

    关注

    0

    文章

    103

    浏览量

    6509
收藏 人收藏

    评论

    相关推荐

    同样是函数,在C和C++中有什么区别

    同样是函数,在 C 和 C++ 中有什么区别? 第一个返回值。 C语言的函数可以不写返回值类型,编译器会默认
    的头像 发表于 11-29 10:25 291次阅读

    常用SQL函数及其用法

    的 SQL 函数及其用法: 一、聚合函数(Aggregate Functions) 聚合函数对一组值执行计算,并返回单个值。 COUNT() 用途 :
    的头像 发表于 11-19 10:18 251次阅读

    Python常用函数大全

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

    如何利用python和API查询IP地址?

    信息的字典,如果查询失败则返回None。 \"\"\" try: url = f\"http://ipapi.co/{ip_address}/json\"
    发表于 08-28 11:55

    面试常考+1:函数指针与指针函数、数组指针与指针数组

    函数是指返回值为指针的函数。语法:返回值类型*函数名(参数列表)。示例代码:#include#includeint*getNumber(in
    的头像 发表于 08-10 08:11 850次阅读
    面试常考+1:<b class='flag-5'>函数</b>指针与指针<b class='flag-5'>函数</b>、数组指针与指针数组

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

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

    安装依赖的Python软件包时报错如何解决?

    ;=1.8,!=1.11.3; python_implementation != \'PyPy\'\"\" failed with error code 1 in None 系统: win10 64位
    发表于 06-26 07:32

    RCC_ADCCLKConfig函数的ADC时钟是默认的吗?

    ADC配置中,没有找到配置ADC时钟的函数RCC_ADCCLKConfig;ADC时钟是默认的吗?
    发表于 03-28 08:36

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

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

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

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

    output函数怎么用

    output 函数是一个通用的术语,并不特指某个具体的编程语言或软件工具。 如果你在使用 Python 编程语言,那么可能是指 print 函数Python 中的 print
    的头像 发表于 02-23 14:21 1255次阅读

    cyu3pi2creceiveBytes函数调用无法正常工作的原因

    检查了是否向 fx3 中的函数传输了正确的值。 但以下是串行日志。 必须从 0x01 的地址中读取 0x0001,但会返回 0xFFFF 的值。 它还会重复 ApiretStatus 值 0 和 1。 导致这种现象的原因有哪些?
    发表于 02-23 07:30

    Cy_BLE_StoreBondingData一直返回INVALID PARAMETER的原因

    rn\", bleApiResult, cy_ble_pendingFlashWrite); } 请问是什么原因导致该函数一直返回错误值。
    发表于 02-21 06:11

    python中open函数的用法详解

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

    round函数公式怎么输入

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