为什么说python里面函数参数的默认值最好不要使用可变类型

news2024/11/25 10:41:38

之前发布过Python中函数的介绍:Python中函数的介绍 ,今天来做一个小小的补充说明:为什么说python里面函数参数的默认值最好不要使用可变类型

Python中,函数参数的默认值是在函数定义时计算的,而不是在每次函数调用时计算。当默认值是可变类型(如列表、字典等)时,这个默认值在函数定义时就会被创建并分配给参数。当函数被调用时,如果没有显式地传递该参数,函数将使用该默认值。

可变类型的默认值在函数定义时只会被创建一次,然后会在后续函数调用中重复使用。这意味着,如果在函数中修改了这个默认值,它将在后续的函数调用中保持修改后的值,而不是返回最初的默认值。

接下来我们通过一个例子演示一下:

def add(a:int,b:list=[]):   # 定义函数的时候就创建了列表
    print(id(b))
    b.append(a)
    print(b)


add(1)
add(2)
add(3)

2d00902ed2c44345e8975ba2da38627b.png

从上面的运行结果,我们可以看出:

如果在函数的定义中,参数默认值使用可变类型,那么可变类型会在函数定义的时候就进行创建,如果使用不当的话,可能得到的效果与我们的预期不一致。

End

 
 
 
 
 
 
 
 
 
 
想进学习交流群和同行一起探讨交流的可以加我好友(xiaobotester),如果觉得文章对你有帮助的话,欢迎点赞转发~
 
 
👇👇👇

关注公众号,测试干货及时送达3c58e2883fcbe74bf1e5dddb8a91c525.png

往期精彩回顾

e3d587c029840c0abd5bb85da4bf5ae6.png

一篇文章为你揭秘pytest的基本用法

Anaconda-一个开源的Python发行版本

Python脚本读取Consul配置信息

Python中使用pickle库进行数据的序列化存储

Python小知识-函数传参怎么设置期望的传参类型?

python解析xml遇到的问题分享(命名空间有关)

分享一下最近使用python字典取值用法的收获

Python里面怎么判断某个字符串是否包含列表中的某一个元素

Python中列表的extend()方法介绍

Python中鸭子类型与多态介绍

Python中的抽象基类介绍

Python中的type与isinstance的区别

Python中类的属性、多继承、自省机制中的__mro__、__dict__ 和dir介绍

Python中__new__和__init__的区别与联系

5f21ade229502b2abec28e8eb4ccad13.png

如果你想系统的学习提升自己的测试技能,如果苦于没有学习资料的话,不放趁着618的时候采购一波书籍吧。618,清华社 IT BOOK 多得图书活动开始啦!活动时间为 2023 年 6 月 7 日至 6 月 18 日,清华 社为您精选多款高分好书,涵盖了 C++、Java、Python、前端、后端、数据库、算法与机器学习等多 个 IT 开发领域,适合不同层次的读者。全场 5 折,扫码领券更有优惠哦!快来京东点击链接(https://pro.m.jd.com/mall/active/3Rho97HkMaGFycLzAWfFdvZdyvRn/index.html) IT BOOK 多得(或扫描京东二维码)查看详情吧!

b7f5413fdb31b57c7f9b25c77ed0e1d1.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/630219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器人与外星人的对话:中国传统哲学的精髓是什么?

一天,机器人Robot和外星人Vick相遇,他俩聊了很多,主要是关于中国传统哲学的,下面是他俩的对话记录。 R:很多人表示他们很痛苦,禅师说那是因为“无明”,外星人,你怎么看? …

【P58】JMeter 简单数据写入器(Simple Data Writer)

文章目录 一、简单数据写入器(Simple Data Writer)参数说明二、准备工作三、测试计划设计 一、简单数据写入器(Simple Data Writer)参数说明 可以将原始数据直接保存到文件 使用场景:一般与 HTML 报告配合使用 使用…

【Python文本处理】基于运动路线记录GPX的文件解析,及对经纬度坐标的数学模型运动速度求解

【Python文本处理】基于运动路线记录GPX的文件解析,及对经纬度坐标的数学模型运动速度求解 解析 GPX文件格式 GPX文件本身其实就是坐标、海拔、时间、心率等综合性的xml文件 如图: 海拔:ele 时间:time 心率:heartr…

【用pytorch进行LSTM模型的学习】

用pytorch进行LSTM模型的学习 LSTM模型用pytorch,采用LSTM对seaborn数据集做预测基本步骤数据的观察特殊数据处理数据归一化模型的构建与选择模型的保存 飞机航班流量预测示例 LSTM模型 LSTM模型长下面这样,主要用在时间序列的预测,具有比RN…

5Why分析法

5Why分析法 由丰田公司的大野耐一提出的对一个问题点连续以5个“为什么”来自问,以追究其根本原因的分析方法。 模型介绍 所谓5Why分析法,又称“5问法”,也就是对一个问题点连续以5个“为什么”来提问,以追究其根本原因。虽为5个…

代码随想录第53天

1.最长公共子序列: 红字的问题都是和最长重复子数组那题的代码进行比较的出来的 动规五部曲分析如下: 确定dp数组(dp table)以及下标的含义 dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串tex…

solidity之智能拍卖案例

文章目录 实现一个简易的拍卖状态变量定义和初始化竞拍功能结束竞拍代码 实现一个简易的拍卖 角色分析:4类角色(拍卖师actioneer,委托人seller,竞买人bidder,买受人buyer) 功能分析:拍卖的基本…

Shell脚本攻略:Linux防火墙(一)

目录 一、理论 1.安全技术 2.防火墙 3.通信五元素和四元素 4.总结 二、实验 1.iptables基本操作 2.扩展匹配 3. 自定义链接 一、理论 1.安全技术 (1)安全技术 ①入侵检测系统(Intrusion Detection Systems)&#xff1…

汽车电子AUTOSAR之BswM模块

目录 前言 正文 总体设计框架 模式仲裁过程 模式控制过程 模式仲裁 模式请求来源(ModeRequestPorts) 模式条件(ModeCondition) 逻辑表达式(LogicExpressions) 模式规则(ModeRules) 模式规则的初始化 模式控制 模式控制基本流程 模式行为 常用函数接口 前言 首先&…

Dependency not found解决方案(Springboot,绝对有效)

目录 问题描述解决方案systemPathmvn install 问题描述 今天在弄一个项目的依赖的时候,easyexcel 的依赖就是下载不了,虽然我的 Maven 配置没问题。 依赖:    Maven 配置:    我切换了几个版本,也无法从镜像下…

git diff去除^M的方法

一,简介 本文主要介绍在git修改的时候,修改文件后,git diff查看修改内容时,发现修改的地方每行结束的地方都会有“^M”,很影响查看。故今天分享一种去除“ ^M”显示的方法,供参考。 二,问题原…

案例29:基于Springboot医疗挂号系统开题报告设计

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

最新版本Portraiture4.1中文版ps磨皮滤镜插件安装包

在Portraiture有非常强大的手动功能,可以为用户进行手动调整照片中的皮肤区域以达到更加完美的效果,软件还支持同时导入上千张照片,用户可以通过自动识别照片中的人脸从而依照自己的风格进行批量处理十分的方便快捷。 最新版本Portraiture 4…

空气污染气象学期末复习笔记

空气污染气象学 (一)研究什么 运用气象学方法研究空气污染物自排放源进入大气层后的散布规律,核心是研究大气输送和扩散 (二)大气污染 大气污染是指由于人类活动或自然过程引起某种物质进入大气中,呈现出足…

Mysql数据库入门基础篇--mysql 多表查询

【Mysql数据库入门基础篇--mysql 多表查询 🔻一、mysql 多表查询1.1 🍃 7种sql joins 的实现1.2 🍃 错误写法---笛卡尔积错误1.3 🍃 正确的多表select写法 🔻二、内连接( inner) join🔻三、 外连接&#xf…

【LeetCode】23. 合并 K 个升序链表

23. 合并 K 个升序链表(困难) 方法一:顺序合并 思路 ListNode* mergeTwoLists(ListNode *a, ListNode *b) {if ((!a) || (!b)) return a ? a : b;ListNode head, *tail &head, *aPtr a, *bPtr b;while (aPtr && bPtr) {if (…

【第十期】Apache DolphinScheduler 每周 FAQ 集锦

点击蓝字 关注我们 摘要 为了让 Apache DolphinScheduler 的广大用户和爱好者对于此项目的疑问得到及时快速的解答,社区特发起此次【每周 FAQ】栏目,希望可以解决大家的实际问题。 关于本栏目的要点: 本栏目每周将通过腾讯文档(每…

卡尔曼滤波与组合导航原理(十二)扩展卡尔曼滤波:EKF、二阶EKF、迭代EKF

文章目录 一、多元向量的泰勒级数展开二、扩展Kalman滤波三、二阶滤波四、迭代EKF滤波 一、多元向量的泰勒级数展开 { y 1 f 1 ( X ) f 1 ( x 1 , x 2 , ⋯ x n ) y 2 f 2 ( X ) f 2 ( x 1 , x 2 , ⋯ x n ) ⋮ y m f m ( X ) f m ( x 1 , x 2 , ⋯ x n ) \left\{\begin{…

大家都说Java有三种创建线程的方式,并发编程中的惊天骗局

在Java中,创建线程是一项非常重要的任务。线程是一种轻量级的子进程,可以并行执行,使得程序的执行效率得到提高。Java提供了多种方式来创建线程,但许多人都认为Java有三种创建线程的方式,它们分别是继承Thread类、实现…

论文浅尝 | Dually Distilling KGE for Faster and Cheaper Reasoning

笔记整理:张津瑞,天津大学硕士,研究方向为知识图谱 链接:https://dl.acm.org/doi/10.1145/3488560.3498437 动机 知识图谱已被证明可用于各种 AI 任务,如语义搜索,信息提取和问答等。然而众所周知&#xff…