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

[PCIe5.0] 2.2.7.1 TPH Rules TPH 机制通过硬件提示优化数据流,适用于高性能计算和存储场景。 阅读详情

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

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

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 授权。

CollisionLoss 设计与实现原理说明 文章摘要 CollisionLoss是一种用于自动驾驶轨迹规划的碰撞惩罚损失函数,其核心思想是用多个沿车身纵轴排列的圆盘来近似表示车辆(Oriented Bounding Box)。该设计通过圆盘间的距离计算实现碰撞检测,具有以下特点: 可微性:圆盘距离计算处处可微,便于梯度回传,而传统矩形碰撞检测(分离轴定理)不可微且计算复杂。 多圆盘设计:沿车身纵向排列多个圆盘能更精确地拟合细长车体,避免单圆盘过度膨胀导致的误报。 安全覆盖:圆盘半径经过数学推导,确保完全覆盖车体矩形,避免漏检(宁可保守)。 软惩罚机制 阅读详情

相关推荐

海康威视GigE工业相机的python调用demo

默认路径安装完成后,在路径C:\Program Files (x86)\MVS\Development\Samples\Python\BasicDemo下的BasicDemo.py中,海康威视官方提供了基本的调用方法,本文也是基于这个修改的。BasicDemo.py提供了通过枚举选择相机的方法,在官方的另一个DEMO:ConnectSpecCamera.py中提供了另一种不通过枚举,直接访问特定IP相机的方法,也可以参考。另外,如果每台相机都定义了唯一的用户定义名,也可以通过用户定义名来区分相机。

xulibo5828的博客 2112

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

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

黑马程序员官方博客 4222

ethercat linux lan9252 - lan9253调试

linux 的ethercat测试

linsheng_111的专栏 1934

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

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

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

Win10右键新建菜单丢了记事本?别慌!5分钟教你用注册表找回来(附权限设置避坑指南)

本文详细指导如何通过注册表编辑器恢复Win10右键新建菜单中丢失的记事本选项,包括重建键值结构、配置ShellNew项及设置权限等关键步骤。特别提供权限避坑指南,确保修改持久有效,帮助用户快速解决这一常见但困扰的问题。

weixin_31714129的博客 861

deepfake detection数据集

最全Deepfake数据集总结,包含各个数据集下载链接: https://github.com/deepfakeinthewild/deepfake_in_the_wild Dataset name Download Generate method Deepfake videos Actors Deepfake-TIMIT low download De...

where_is_horse的博客 1万+

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

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

qq_17753903的博客 4万+

【AIGC】大模型面试高频考点09-大模型Agent框架

聚焦AIGC专业技术分享

一个内容严谨、方向前沿、极具实践价值的AI大模型技术分享站 1968

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

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

weixin_68789096的博客 286

AI智算-K8s如何利用IB RDMA网络加速大模型分布式训练

在AI人工智能领域,大模型的微调是提升性能不可或缺的一环。通过结合InfiniBand RDMA网络的高速互联、Kubernetes的云原生容器化部署,以及智能算力调度平台,可以打造一个高效、灵活且可扩展的分布式训练环境。

Kason_iWiki 820

飞牛fnNAS搭建个人小账本

本文介绍了如何在飞牛NAS上部署ezBookkeeping个人记账应用。该开源工具支持多平台使用,具备双因素认证、多级分类等功能。文章详细讲解了Docker激活、镜像下载、容器部署等步骤,并展示了账户管理、交易记录等基础操作。同时指导用户通过ZeroTier实现远程访问,方便随时随地使用个人记账系统。该方案既保障了数据隐私,又提供了专业记账功能,适合对财务隐私敏感的用户。

dgnankai的专栏 783

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

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

weixin_39836860的博客 102

PCIe 全解析笔记:从协议本质到工程实现

学习 PCIe,最容易陷入的误区是直接跳进协议手册(Base Spec 1300 多页),然后在 TLP 字段、LTSSM 状态、Ordering Rules 中迷失方向。正确的思维路径历史维度:从 PCI 到 PCIe,解决了什么核心矛盾?抽象维度:协议栈分层的真正意图是什么?工程维度:高速串行链路面临哪些物理挑战?协议如何应对?系统维度:作为 CPU 与外设的"动脉",PCIe 如何融入整个计算机体系?带着这四个视角去看每一个细节,知识才能内化为认知。

m0_46644103的博客 265

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

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

CDA数据分析师 779

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

weixin_39926588的博客 192

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

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

weixin_39598941的博客 157

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

python函数出现none_Python 函数为什么会默认返回 None?

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

weixin_39837207的博客 218

python的return默认返回_None为什么会被Python函数默认返回?

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

weixin_39881760的博客 919

python函数运行后none_Python 函数为什么会默认返回 None?

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

weixin_27727467的博客 698

python的函数is none_python 函数为什么会默认返回 None?

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

weixin_39729115的博客 87
上一篇: 有关Python爬虫,看这几本书就够了!
下一篇: 自从学了 Flask,我就铁了心转向了 Django
codingpy
博客等级 码龄11年 1873粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值