Python 函数为什么会默认返回 None?

小程序HTTPS证书配置踩坑记:为什么Android访问失败而iOS正常? 本文深入剖析了小程序开发中常见的跨平台网络问题:Android访问HTTPS接口失败而iOS正常。核心原因在于服务器(如Nginx)HTTPS证书链配置完整,Android系统对此校验严格,而iOS相对宽松。文章提供了从问题诊断、使用在线工具检测到修复Nginx证书链配置的完整解决方案,并总结了HTTPS部署的最佳实践,帮助开发者从根本上避免此类“玄学”故障。 阅读详情

点击上方“编程派”,选择设为“设为星标”

优质文章,第一时间送达!

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 值返回(出自:compile.c)


也就是说,如果定义的函数没有返回值,Python 解释器就会(强行地)默认给我们注入一段返回逻辑!对于解释器的这种附赠的服务,大家是觉得很贴心,还是嫌弃它多事呢?这样的做法似乎没多少好处,但似乎也没有坏处?

欢迎大家留言讨论~

作者:Python 猫

来源公众号:Python 猫

题图:pexels,CC0 授权。

VCS2018在Ubuntu20 18安装步骤 之前在Ubuntu20上下VCS,花了好几天时间,本来想写博客避免以后重复劳动。但由于各种原因拖了一两个月,这次由于疫情原因,期末考试推迟,所以就再次在Ubuntu18上下了VCS,顺便写博客记录。 以下VCS2018安装方法适用于 Ubuntu20、Ubuntu18,亲测可用。其他Linux发行版没试过,但应该步骤差多。 文章目录安装包安装步骤1、建立安装路径,更改权限2、运行安装器进行安装3、生成License文件4、设置环境变量5、验证License6、启动lmgrd验证软件是否安装成功dvever 阅读详情

相关推荐

Python函数返回None

在编写函数时,我们应该根据具体的需求和逻辑来决定函数是否需要返回值,并使用return语句来指定返回的结果。例如,当函数执行某些操作,但并需要返回特定结果时,可以使用None值作为返回值。另外,如果函数用于修改传递给它的可变对象(如列表或字典),则无需返回值,因为函数的修改将直接反映在原始对象上。在上面的代码中,我们定义了一个名为add_numbers的函数,它接受两个参数a和b,并返回它们的和。然而,如果我们希望函数返回一个实际的值,而None,我们可以使用return语句来指定返回值

PixelShadeZ的博客 1059

Python 函数默认返回None原因是什么?

Python 函数默认返回None是什么原因?定义函数没有返回值Python 解释器就会强行地默认给注入一段返回逻辑!实际上 Python 中有很多行为都是隐性的。   Python 有一项默认的做法,很多编程语言都没有,所有函数都会有一个返回值管有没有写 return 语句。   在正式开始之前,用pass语句 和 …对象 作为例子,看下 Python函数返回值:   定义的两个函数都没有写任何的 return 语句,但是在函数调用后,都能取到一个返回值。执行效果跟直接写 r.

黑马程序员官方博客 4220

mipi转lvds芯片 GM8775C软硬件开发资料(包括PADS原理图PCB+GM8775配置手册、数据手册、用户手册)

mipi转lvds芯片 GM8775C软硬件开发资料,GM8775C是专用mipi转lvds芯片。能灵活选择成1/2/3/4通道接收功能,单通道数据率支持1Gbps速率,最大支持4Gbps速率;视频输入格式支持16bit RGB565、18bit RGB666和24bit RGB888模式。MIPI通道支持LPDT传输和反向LPDT传输。LVDS输出支持单/双通道,18/24bit,JEIDA/VESA模式。像素时钟支持25Mhz~150Mhz。最大支持视频格式为FULL HD(1920x1200),可灵活配置输出数据通道方便PCB布线。资料包含IIC配置调试GM8775软件、硬件参考设计原理图PCB、GM8775配置手册、数据手册、用户手册等。

Python函数 ④ ( 函数 None 返回值 | None 值应用场景 | 用于 if 判断 | 定义无初始内容变量 | 代码示例 )

一、函数 None 返回值 1、空返回值 2、代码示例 - 接收 None 返回值 3、代码示例 - 使用 return 关键字返回 None 二、None 值应用场景 1、None 值应用场景简介 2、代码示例 - 使用 None 进行 if 判断 3、代码示例 - 定义无初始内容变量

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 3603

Python-使用空值进行赋值-None

0.摘要 在Python中,尤其是数组当中,对于一些异常值往往需要进行特殊处理。为了防止异常值与正常数据混淆,影响最终计算结果,常用的方法是将异常值置零或者置空。置零的方法较为简单,本文主要介绍如果对python中的数据进行置空。 1.赋值为None 对于一般数据,可以直接为其赋值为None。 i = 1 i = None # int 型数据置空 s = "strin...

qq_17753903的博客 4万+

Python函数为什么默认返回None

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

weixin_68789096的博客 284

强行终止python_Python 函数为什么默认返回 None

?Python猫” ,一个值得加星标的公众号Python 有一项默认的做法,很多编程语言都没有——它的所有函数都会有一个返回值管你有没有写 return 语句。 本文出自“Python为什么”系列,在正式开始之前,我们就用之前讨论过的 pass语句 和 …对象 作为例子,看看 Python函数是怎样“无中生有”的:可以看出,我们定义的两个函数都没有写任何的 return 语句...

weixin_39836860的博客 99

python 函数为什么默认返回 None

作者:豌豆花下猫 来源:PythonPython 有一项默认的做法,很多编程语言都没有——它的所有函数都会有一个返回值管你有没有写 return 语句。 本文出自“Python为什么”系列,在正式开始之前,我们就用之前讨论过的pass语句和…对象作为例子,看看 Python函数是怎样“无中生有”的: 可以看出,我们定义的两个函数都没有写任何的 return 语句,但是在函数调用后,都能取到一个返回值。 它们的执行效果跟直接写 return 语句相比,是完全相同的: ...

CDA数据分析师 775

python 函数返回none_Python 函数为什么默认返回 None

原标题:Python 函数为什么默认返回 NonePython 有一项默认的做法,很多编程语言都没有—— 它的所有函数都会有一个返回值管你有没有写 return 语句。本文出自“Python为什么”系列,在正式开始之前,我们就用之前讨论过的pass语句 和…对象 作为例子,看看 Python函数是怎样“无中生有”的:可以看出,我们定义的两个函数都没有写任何的 return 语句,但是...

weixin_39926588的博客 185

python函数返回none_Python 函数为什么默认返回 None

Python 有一项默认的做法,很多编程语言都没有——它的所有函数都会有一个返回值管你有没有写 return 语句。本文出自“Python为什么”系列,在正式开始之前,我们就用之前讨论过的 pass语句 和 …对象 作为例子,看看 Python函数是怎样“无中生有”的:可以看出,我们定义的两个函数都没有写任何的 return 语句,但是在函数调用后,都能取到一个返回值。它们的执行效果跟直...

weixin_39598941的博客 155

python函数的return返回值以及None字符类型所产生的一些问题的解答

这里我默认大家对于python函数的基本结构已经有了一定的认识,所以就再介绍基础知识了。但是为了大家理解起来方便一些,我这里先对于函数的作用进行简单的解释:函数就是一个封装的盒子,你也可以理解为实现特定功能的机器,每当你需要完成某项任务时,由于函数这个机器就有这样的功能,你都可以直接去调用它,直接用简简单单的一行调用代码去完成任务。这样就用当每次要实现这个功能的时候都傻傻的打上一堆代码,从而可以降低工作量和使得代码的可读性更高(毕竟更加美观了嘛,还显得你是个大佬)。

m0_75236534的博客 2331

Python 递归函数返回值None 的解决办法

在使用 Python 开发的过程中,避免了会用到递归函数。但递归函数返回值有时会出现意想到的情况。 下面来举一个例子: >>> def fun(i): ... i += 1 ... if i < 5: ... fun(i) ... else: ... return i ... >>> r = fun(0) >>> print(r) 比如上面这段代码,乍一看没什么问题,但返回值

量慧实工作室LHStudio的博客 4939

Python函数(二)

1.函数返回值就是函数在执行完成后,返回给调用者的结果。2.返回值的应用语法就是:通过return关键字,就能向调用者返回数据。3.函数体在遇到return后就结束了,所以写在return后的代码会执行。

whz31的博客 1130

Python函数返回值处理全解析:单值、多值、`None`场景与应用技巧

合理处理函数返回值是编写健壮Python代码的关键。掌握单值返回的常规处理、多值返回的解包技巧、None值的正确判断方法,结合类型提示和明确的接口设计,可以显著提升代码的可读性和可靠性。

燃灯工作室 696
上一篇: 有关Python爬虫,看这几本书就够了!
下一篇: 自从学了 Flask,我就铁了心转向了 Django
codingpy
博客等级 码龄11年 1745粉丝 104原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值