Python的函数定义中99%的人会遇到的一个坑

9. Python 学习过程的第一个山坡,99%的人都倒在了山坡下 没错,这篇文章讲的是 Python 中的函数,99%的人学不会的也正是函数。 阅读详情

列表是一种经常使用的数据类型。在函数的定义中,常常会使用列表作为参数。

比如,要测试一个接口的数据,接口返回的数据格式如下:

{
  "code": "20000", 
  "data": ["孙悟空","李白","甄姬"], 
  "msg": "success", 
  "status": 0
}

要测试的内容是:返回的 data 数据是否跟需求符合。在测试之前,需要对数据进一步处理,比如要增加 “王昭君” 这个元素进去,需要写一个函数:

def add_element(data=["孙悟空","李白","甄姬"]):
    data.append('王昭君')
    return data

print(add_element())
print(add_element())
print(add_element())

在函数定义的时候经常会给参数设置默认值,在这个例子中,将 data 参数设置了默认值,函数定义以后,后面会被频繁的调用,期望值应该是打印如下:

["孙悟空","李白","甄姬","王昭君"]
["孙悟空","李白","甄姬","王昭君"]
["孙悟空","李白","甄姬","王昭君"]

实际结果为:

["孙悟空","李白","甄姬","王昭君"]
["孙悟空","李白","甄姬","王昭君","王昭君"]
["孙悟空","李白","甄姬","王昭君","王昭君","王昭君"]

原因

当定义函数时,会保存函数中默认参数 data 的值,也就是 ["孙悟空","李白","甄姬"],在每次调用的时候如果传递了新的实参,则使用传递的参数;没有传递,使用定义函数时保存的默认参数。

上面两次调用中,都没有传递新的实参,程序会调用定义函数时保存的默认参数,因为 append() , 在第一次调用以后,默认参数已经由 ["孙悟空","李白","甄姬"] 改变为 ["孙悟空","李白","甄姬","王昭君"],再次执行 append() 之后,就变成了 ["孙悟空","李白","甄姬","王昭君","王昭君"];同理,第三次又改变了。

可以使用 id() 函数来定位问题:

def add_element(data=["孙悟空","李白","甄姬"]):
    # id 来表示是不是同一个对象
    print(id(data))
    data.append('王昭君')
    return data

print(add_element())
print(add_element())
print(add_element())

打印出来的 id(data) 为同一个对象,也就是默认参数。如果我们改变 第二个 print(add_element())为 print(add_element(["孙悟空","李白","甄姬"])),那么第 2 个 id(data) 就会发生变化,因为它不在是默认值,而是新传进来的实参,实际结果也将变成:

2543416926792
['孙悟空', '李白', '甄姬', '王昭君']
2543418907848
["孙悟空","李白","甄姬", '王昭君']
2543416926792
['孙悟空', '李白', '甄姬', '王昭君', '王昭君']

改进方案

  • 如果参数中有列表,尽量不要用它做默认参数
  • 如果使用了列表作为默认参数,函数调用时传入实参,而不是省略
  • 可以在函数体中另外定义一个变量接收默认参数
def add_element(data=["孙悟空","李白","甄姬"]):
    if data == ["孙悟空","李白","甄姬"]:
        data = ["孙悟空","李白","甄姬"]
    data.append('王昭君')
    return data

这里给大家分享一份Python全套学习资料,包括学习路线、软件、源码、视频、面试题等等,都是我自己学习时整理的,希望可以对正在学习或者想要学习Python的朋友有帮助!

优快云大礼包:全网最全《全套Python学习资料》免费分享🎁

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉优快云大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击)👈

​style=“margin: auto” />

1️⃣零基础入门

① 学习路线

对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

2️⃣国内外Python书籍、文档

① 文档和书籍资料

在这里插入图片描述

3️⃣Python工具包+项目源码合集

①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

4️⃣Python面试题

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

5️⃣Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
上述所有资料 ⚡️ ,朋友们如果有需要 📦《全套Python学习资料》的,可以扫描下方二维码免费领取 🆓
😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉优快云大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击)👈

​

FAGLB03余额显示异常排查与修复指南 本文针对SAP新总账中FAGLB03报表余额显示异常问题,提供了专业的排查与修复指南。文章深入剖析了数据不一致的核心原因,如FAGLFLEXT汇总表与凭证明细不同步、年度余额结转(FAGLGVTR)失败等,并详细介绍了使用FAGLF03进行精准诊断、通过SE38执行标准调整程序TFC_ADJUST_VZ进行修复的标准操作流程,帮助用户快速恢复数据一致性,确保财务报表的准确性。 阅读详情

相关推荐

iTunes登录协议逆向与自动化实现

本文详细解析了iTunes登录协议的逆向工程与自动化实现方法,涵盖请求体构造、签名生成和会话管理等关键技术。通过XML结构解析、X-Apple-ActionSignature生成原理及完整登录流程实现,帮助开发者高效完成iTunes自动化登录,提升工作效率。

weixin_26938645的博客 939

python定义一个变量_Python的函数定义中99%的人会遇到的一个坑

列表是一种经常使用的数据类型。在函数的定义中,常常会使用列表作为参数。比如,要测试一个接口的数据,接口返回的数据格式如下:{ "code": "20000", "data": ["孙悟空","李白","甄姬"], "msg": "success", "status": 0 }要测试的内容是:返回的 data 数据是否跟需求符合。在测试之前,需要对数据进一步处理,比如要增加 “...

weixin_39723899的博客 88

避坑指南:Unity新版InputSystem在移动端的5个常见问题及解决方案

本文针对Unity新版InputSystem在移动端开发中的常见问题,提供了5个关键解决方案,包括虚拟摇杆灵敏度调节、多点触控冲突处理、按钮反馈延迟优化、手势识别与陀螺仪数据融合以及Android/iOS平台差异处理。这些实战经验帮助开发者高效解决触控适配难题,提升移动游戏体验。

soda5的博客 405

python中、函数定义可以不包括以下_Python函数定义,99%的人会遇到的一个坑

列表是一种经常使用的数据类型。在函数的定义中,常常会使用列表作为参数。比如,要测试一个接口的数据,接口返回的数据格式如下:NO.1 : 测试准备要测试的内容是:返回的 data 数据是否跟需求符合。在测试之前,需要对数据进一步处理。比如要增加 "王昭君" 这个元素进去,需要写一个函数:在函数定义的时候经常会给参数设置默认值。在这个例子中,将 data 参数设置了默认值,函数定义以后,后面会被频繁的...

weixin_39700215的博客 986

高缺失率时空数据插补实战:从随机森林到扩散模型的性能对比

数据缺失是数据分析与机器学习建模中普遍面临的挑战,尤其在时空数据领域,传感器故障、传输中断等问题常导致数据不完整。数据插补技术旨在基于已知数据的模式和关联性,合理估算缺失值,为后续分析提供可靠基础。其核心原理在于利用数据的时空相关性(如时间周期性、空间邻近性)及与外部驱动因素(如交通、气象)的关联构建预测模型。这项技术的价值在于能将不完整的数据集转化为可用于高质量分析和预测的可用资产,广泛应用于环境监测、交通流量预测、金融风控等领域。本文聚焦于一个极具挑战性的场景——PM2.5监测数据缺失率高达82%,通过

weixin_30363285的博客 544

最优控制 (Optimal Control) 算法详解及案例分析

最优控制是一种通过优化控制输入,使系统在满足约束条件的情况下达到最优性能的控制方法。其目标是最小化或最大化一个性能指标。

闲人编程的博客 2092

python 定义函数为什么有个长线_python的函数定义中99%的人会遇到的一个坑

列表是一种经常使用的数据类型。在函数的定义中,常常会使用列表作为参数。比如,要测试一个接口的数据,接口返回的数据格式如下:{"code":"20000","data":["孙悟空","李白","甄姬"],"msg":"success","status":0}要测试的内容是:返回的 data 数据是否跟需求符合。在测试之前,需要对数据进一步处理,比如要增加 “王昭君” 这个元素进去,需要...

weixin_30650059的博客 177

【ArcGIS Pro微课1000例】0022:基于DEM进行流域分析生成流域图

填洼Fill,在进行水文分析后续操作前,首先要对DEM进行填洼,创建无凹陷点的DEM。在ArcGIS中使用的是八方向流量建模(D8算法),工具位于水文分析下的【流向】。填洼需要使用水文分析工具下的【填洼】。确定输入与输出即可。

智慧空间实验室 2752

python的函数定义中99%的人会遇到的一个坑

列表是一种经常使用的数据类型。在函数的定义中,常常会使用列表作为参数。 比如,要测试一个接口的数据,接口返回的数据格式如下: { "code": "20000", "data": ["孙悟空","李白","甄姬"], "msg": "success", "status": 0 } 要测试的内容是:返回的 data 数据是否跟需求符合。在测试之前,需要对...

weixin_30855761的博客 172

YOLO11涨点优化:特征融合改进 | 引入BiFPN (双向特征金字塔) 加权融合机制,自适应分配不同尺度特征权重

YOLO11与BiFPN特征融合技术解析 本文深入剖析了YOLO11目标检测架构及其BiFPN特征融合机制的关键创新。2024年发布的YOLO11通过C3k2模块、SPPF池化和C2PSA注意力机制,在COCO数据集上以更少参数实现更高精度。研究发现传统FPN+PAN结构存在特征融合权重分配不均和计算冗余问题,而BiFPN通过双向跨尺度连接和加权融合机制实现了突破: 架构创新:BiFPN采用剪枝策略、跳跃连接增强和层级重复叠加,优化信息流动路径 加权融合:提出快速归一化融合算法,动态分配特征权重,相比Sof

2601_95807009的博客 175

Trae 保姆级使用指南,零基础小白也能实现编程。

Trae 使用指南 Trae AI 使用 零基础编程 满血版 DeepSeek-R1&V3 AI IDE 深度理解中文开发场景 傻瓜式编程 编程入门 开发入门

Mr.L-OAM的博客 5817

python函数定义函数名正确_Python的函数定义中99%的人会遇到的一个坑

列表是一种经常使用的数据类型。在函数的定义中,常常会使用列表作为参数。比如,要测试一个接口的数据,接口返回的数据格式如下:{"code": "20000","data": ["孙悟空","李白","甄姬"],"msg": "success","status": 0}要测试的内容是:返回的 data 数据是否跟需求符合。在测试之前,需要对数据进一步处理,比如要增加 “王昭君” 这个元素进去,需要写一...

weixin_39642981的博客 153

工艺边与定位孔设计经验规则总结

工艺边是在SMT焊接时,为了PCB和导轨接触预留的PCB边。工艺边和PCB的接触部分一般需要开槽,或者使用邮票孔,以方便后期去除工艺边。

fydar的博客 1985

Python函数默认参数陷阱全解析,99%的人都误解了它的行为

掌握函数参数默认值的可变对象陷阱,避免Python常见bug。本文解析其底层机制,揭示函数定义时默认值只初始化一次的关键原理,提供安全编码方案。适用于列表、字典等默认参数场景,提升代码健壮性,值得收藏。

LearnFlow的博客 919

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

99% 人会做错的Python题

文章来源:王的机器作者:王圣元本文含2693字,5图表截屏建议阅读15分钟本文是听说你会玩 Python 系列的第二篇1 - 六酷技巧2 - 99% 的人会做错的题引言题目:在...

简说Python的博客 496

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

一道99% 人会做错的Python题

还有人会选第三个吧,[1] [1, 1]。在运行第二行代码时,也没有给参数值,还是用其默认值,但这个时候默认参数的类型是可更改的列表,它在第一次运行函数 f() 的时候已经变成了 [1],而这个 [1] 就更新为默认值了。第二次调用 f() 赋值给 x2 时,PyObject 里的值更新为 [1, 1],而 x1 和 x2 指向它,因此两个值都更新为 [1, 1]方法一:用 id(X) 函数,对 X 进行某种操作,比较操作前后的 id,如果不一样,则 X 不可更改,如果一样,则 X 可更改。

2401_83642079的博客 993

计算机控制技术及应用

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

python实现图片文字提取,准确率高达99%,强无敌!!!

上次我使用的百度AI开放平台的API接口实现图片的转化,后来有许多小伙伴都私信问我,怎么获取百度AI平台的AK和SK。为了统一回答大家的问题,今天我又使用百度API实现了一个从图片中提取文字和识别身份证的功能,详细描述实现过程,有收获的小伙伴记得收藏、转发分享哦。 百度AI开放平台 百度AI开放平台网址:https://login.bce.baidu.com/ 首先我们需要注册一个账号,注册登录之后我们选择文字识别 菜鸟小白的平台因为已经创建了一个应用了,首次登录应该是没有应用的,点击创建应用就好了 后

菜鸟小白的学习分享 1万+

python从1加到99_9. Python 学习过程的第一个山坡,99%的人都倒在了山坡下

Python 学习的第一个难关 – 函数,这个地方学会的人觉得没有啥,没学过的学的时候迷迷瞪瞪,不用慌,学编程就是这样,先学过去,在从上帝视角去看,坚持打卡,我一天写一篇,你可以两天学一篇。 已完成的文章本系列文章将在2021年春节前完成,欢迎关注,点赞,评论 --- 梦想橡皮擦想学 Python 爬虫,可以订阅橡皮擦专栏哦~ ???????????? 点击发现惊喜 ????????????九、Python 中函数是基础部分第一道难...

weixin_39669982的博客 570

最新一道99% 人会做错的Python题

在运行第二行代码时,也没有给参数值,还是用其默认值,但这个时候默认参数的类型是可更改的列表,它在第一次运行函数 f() 的时候已经变成了 [1],而这个 [1] 就更新为默认值了。第二次调用 f() 赋值给 x2 时,PyObject 里的值更新为 [1, 1],而 x1 和 x2 指向它,因此两个值都更新为 [1, 1]在运行第一行代码时,没有给参数值,则用其默认值 [],然后添加元素 1,结果是 [1],没任何问题。那么结果就是 [1] [1,1] 了。为什么结果不是 [1, 1] [1, 1] 呢?

2401_84584338的博客 886

一道99% 人会做错的Python题(1)

在运行第二行代码时,也没有给参数值,还是用其默认值,但这个时候默认参数的类型是可更改的列表,它在第一次运行函数 f() 的时候已经变成了 [1],而这个 [1] 就更新为默认值了。第二次调用 f() 赋值给 x2 时,PyObject 里的值更新为 [1, 1],而 x1 和 x2 指向它,因此两个值都更新为 [1, 1]方法一:用 id(X) 函数,对 X 进行某种操作,比较操作前后的 id,如果不一样,则 X 不可更改,如果一样,则 X 可更改。为什么结果不是 [1, 1] [1, 1] 呢?

2401_83817769的博客 613

99% 人会做错的python题

本文含2693字,5图表截屏建议阅读15分钟引言题目:在不运行下面代码(Python 3 不是 Python 2)的情况下选择答案。def f( x=[] ): x.a...

机器学习算法那些事 299

详解闭包与装饰器, 99%的人看了这篇文章后就懂了

我觉得在开始学一种东西时,应该用20%的时间读取80%的基础内容,剩下20%的内容需要用80%的时间才能深入理解,这篇文章就是让你用20%的时间读取80%的内容的 本文参考https://foofish.net/python-decorator.html 在python这种动态语言里,一切都是对象,包括函数也是对象,所以便有了闭包 由于本人见识浅短,如果错误请各位大佬指正,非常感谢! ...

漏れた玩具博客 8351

Python解密实战案例解析(99%的人都忽略的细节)

掌握Python解密实战案例,深入剖析常见加密算法破解方法,涵盖文件解密、网络通信解码等真实场景。通过逆向分析与代码实现,揭示99%人忽略的关键细节,提升安全攻防能力,值得收藏。

codeink的博客 383

介绍10个常用的Python内置函数,99.99%的人都在用!

人生苦短,快学Python!对于Python内置函数,在心里想一下:什么是Python内置函数呢?内置函数简介Python 解释器自带的函数叫做“内置函数”,这些函数不需要import 导...

小詹学python的博客 795
上一篇: 打破界限:SQL数据库水平扩展的8大挑战与机遇
下一篇: 开发环境配置整理大全——Visual Studio 2022安装篇
Llama-Turbo
博客等级 码龄4年 9901粉丝 2022原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值