避坑指南!Python里面的这九个坑,坑的就是你

news2025/1/30 16:12:29

Python里面有一些坑,让你防不胜防,菜鸟经常会弄晕,而学习多年的Python老鸟也会时不时中招。小编整理了9个坑,都是会经常碰到的坑,让你大呼我曾经也碰到过!

在这里插入图片描述

虽然是小的问题,但是在实际的项目中,哪怕一个很小的错误,都会引起一连串的问题。有的时候,为了找这一个微小的bug要花费很大的力气,让人很郁闷。

坑1.lambda自由参数之坑

排序和分组的key函数常使用lambda,表达更加简洁,但是有个坑新手容易掉进去:
在这里插入图片描述

但是实际却输出: 3,3,3. 定义lambda使用的i被称为自由参数,它只在调用lambda函数时,值才被真正确定下来,这就犹如下面打印出2,你肯定确信无疑吧。
在这里插入图片描述

正确做法是转化自由参数为lambda函数的默认参数,就是给i一个默认的值:
在这里插入图片描述

坑2. 默认参数设置为空

含有默认参数的函数,如果类型为容器,且设置为空:

在这里插入图片描述

这是可变类型的默认参数之坑,请务必设置此类默认参数为None:

在这里插入图片描述

坑3.共享变量未绑定之坑

有时想要多个函数共享一个全局变量,但却在某个函数内试图修改它为局部变量:

在这里插入图片描述

应该在f函数内显示声明i为global变量:

在这里插入图片描述

坑4.各种参数使用之坑

4.1) 位置参数必须一一对应,缺一不可
在这里插入图片描述

但是下面这样的调用就不ok:

在这里插入图片描述

4.2) 关键字参数必须在位置参数右边
在这里插入图片描述

这样就是不行,关键字参数必须在位置参数的右边

4.3) 可变关键字参数

如下x是可变关键字参数:
在这里插入图片描述

但是不能这样玩:

f(1) TypeError: f() takes 0 positional arguments but 1 was given

坑5 列表删除之坑

删除一个列表中的元素,此元素可能在列表中重复多次:
在这里插入图片描述

考虑删除这个序列[1,5,5,5,7]中的元素5,结果发现只删除其中两个:[1, 5, 7]

原因是这个序列在删除的时候,动态的缩短,当你第二次循环的时候,已经跳过了一个5。

正确的做法,构造成字典:
在这里插入图片描述

利用字典的key的唯一性,这样就能很干净的删除了。

坑6.相同值的不可变对象
在这里插入图片描述

key=1,value=go的键值对神奇消失了,这个是什么原因,有点丈二和尚摸不着头脑。这是因为具有相同值的不可变对象在Python中始终具有相同的哈希值。由于存在哈希冲突,不同值的对象也可能具有相同的哈希值。

坑7.谜一样的字符串驻留
在这里插入图片描述

如果上面例子返回True,但是下面例子我们稍微换一下,加入一个@为什么是False:
在这里插入图片描述

这与Cpython 编译优化相关,行为称为字符串驻留,但驻留的字符串中只包含字母,数字或下划线。

坑8.奇怪的for
在这里插入图片描述

是不是很奇怪,执行了一次for循环之后,i就变成了5,为什么不是执行一次就退出?其实for在Python中的工作方式是这样的,range(5)生成的下一个元素就被解包,并赋值给目标列表的变量i,所以 i = 5 并不会影响循环。

坑9.生成器的执行时机
在这里插入图片描述

g为生成器,list(g)后返回[2,4,6],因为每个元素肯定至少都出现一次。所以这个结果这不足为奇。但是,请看下例:

在这里插入图片描述

这是不是有点不可思议~~ 原因在于,生成器表达式中, in 子句在声明时执行, 而条件子句则是在运行时执行。

或者我们这样解释就明白了:
在这里插入图片描述

最后

最后多说一句,小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!(文末领取

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。在这里插入图片描述

二、Python必备开发工具

在这里插入图片描述

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。(文末领读者福利
在这里插入图片描述
在这里插入图片描述

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(文末领读者福利
在这里插入图片描述

五、Python练习题

检查学习结果。
在这里插入图片描述

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。 (文末领取哦
在这里插入图片描述
在这里插入图片描述

这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

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

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

相关文章

测出让人血压升高的页面崩溃,我是如何排查的

前情回顾 前几天在一次web应用测试过程中,前端发起了向后端接口的查询请求,由于后端响应较慢,前端一直处于等待响应返回状态。在几分钟后,突然页面出现让人惊悚的“噢噢,页面崩溃了”几个大字。 看到这几个字的一瞬间…

用于销售、报告等的 LearnDash Group Management LMS分组管理插件

目录 获取强大、直观的LearnDash LMS组管理和报告 使用 LearnDash Groups LMS分组管理插件进行 B2B 销售 节省设置分组的时间或让客户自己构建和购买! 获取强大、直观的LearnDash LMS组管理和报告 LearnDash分组是将学生组织成逻辑单元以进行报告和课程访问的绝…

java回顾:Maven高级

目录 一、私服搭建 二、Maven高级 2.1、依赖范围 2.2、依赖传递 2.3、依赖可选 2.4、依赖排除 2.5、依赖冲突 三、ssm工程改造成分层构建 3.1、maven的继承 3.2、继承的一些应用 3.3、maven的聚合(多模块开发) 一、私服搭建 https://blog.…

rust语句,表达式以及函数

语句和表达式 在rust里,语句和表达式的区别是非常重要的。语句没有返回值,表达式有返回值。例如: fn main() {let y {let x 3; // 赋值语句x 1 // 表达式};println!("The value of y is: {}", y); }上面使用一…

SQL | 自联接 Self Join

有时你可能需要获取位于同一个表中的相关数据。为此,你可以使用一种特殊的联接,称为自联接(Self Join)。在今天的文章中,我们将学习如何使用 Navicat Premium 作为数据库客户端编写包含自联接的查询。如果你没未使用过…

报表工具软件-FineReport JS实现下拉框自动展开

1. 概述 1.1 预期效果 在使用下拉框做筛选查询时,需要点击下拉框下拉三角才会展开所有选项,有些使用场景下,用户希望自动展开选项列表,尤其是在多个控件联动场景下。如下图所示: 地区控件选择地区后,销售…

新一代最强开源UI自动化测试神器Playwright(Java版)页面元素交互

Playwright 可以与 HTML 输入元素交互,例如文本输入、复选框、单选按钮、下拉选择框、鼠标点击、字符输入、模拟键盘事件以及上传文件和焦点元素。 Playwright 操作文本框 使用Locator.fill()是填写表单字段的最简单方法。input它聚焦元素并使用输入的文本触发事件…

JVM面试题详解系列——垃圾收集算法详解

垃圾收集算法 标记 - 清除算法 首先标记出所有需要被回收的对象,标记完后统一回收所有被标记的对象。 后续的收集算法都是基于这种思路并对其不足进行改进而得到的。 这种方法主要有两个缺点: 一个是效率问题,标记和清除两个过程的效率都…

最短路径(难)

目录 一、Dijkstra算法 动态演示: 关键代码: 完整代码: 运行结果: 二、Floyd算法 详细介绍 关键算法: 完整代码: 运行结果: 一、Dijkstra算法 Dijkstra算法:可以求带权图中…

开发者还能这样开发小游戏变现

根据《2022微信小游戏增长白皮书》显示,目前微信小游戏开发者数量已经超过10万人次,特别是在持续出现小游戏爆火社交平台的趋势下,小游戏发展势头强劲。 此外仅看微信小游戏的商业规模,2022年相较于2021年实现了超 30%的商业增长…

快速了解Azure SQL部署类型的小技巧

目录 (一)前言 (二)正文 1. 语法 2. 结果分析 3. 实例 (1)SQL SERVER (2)Azure SQL (一)前言 我们知道在常规的SQL SERVER中我们会使用SELECT VERSIO…

我国汽车保险杠行业对汽车产业依存度较大 市场需求呈良性上升态势

根据观研报告网发布的《2022年中国汽车保险杠市场分析报告-市场发展格局与投资潜力研究》显示,汽车保险杠是汽车车身上一种较大的外覆盖零部件,其作用是在汽车发生碰撞时,保护汽车车身及附件,轻微碰撞可以依靠保险杠自身吸收能量&…

MySQL中的这14个神仙功能,惊艳到我了!!!

前言 我最近几年用MYSQL数据库挺多的,发现了一些非常有用的小玩意,今天拿出来分享到大家,希望对你会有所帮助。 1.group_concat 在我们平常的工作中,使用group by进行分组的场景,是非常多的。 比如想统计出用户表中…

劲牌连续两年问鼎全国质量大奖背后的密码

11月24日,第二十届全国质量奖“中国杰出质量人”正式公布,劲牌公司董事长吴少勋成为全国10人名单之一。这是劲牌公司继2021年获得第十九届全国质量奖组织奖后,又获得全国质量奖个人奖。连续两年分别获得全国质量奖组织奖和个人奖,…

18岁开始学习编程是否来得及?

18岁开始学习编程完全来得及,不仅来得及,而且还可以选择走专业的程序研发路线,在当前产业互联网的推动下,未来程序开发岗位的数量还会进一步得到攀升。 18岁开始学习编程可以根据自身的实际情况来规划具体的学习路线,对…

java回顾:ssm整合、纯注解开发

目录 一、搭建环境 1.1、spring环境搭建 1.1.1 测试SpringIOC环境 1.2、搭建Mybatis环境(原生mybatis) 二、Spring整合mybatis 三、Spring整合SpringMVC 四、SSM执行流程 五、纯注解开发配置文件模板 声明: SpringMVC: 注解 XML 注解: Control…

[streamlit]数据科学科研工作者的神器,必须要推荐一下

1. 前言 做科研当然要有过硬的专业知识,但是也少不了一些辅助,才能最大程度发挥我们的能力。因此,除去我们模型性能优秀,结果良好以外,如何进行一个好的展示,也是非常有必要的。那么今天,我们就…

推荐系统:基于ConvNCF推荐算法的推荐系统实现 代码+数据详细教程

1.案例知识点 推荐系统任务描述:通过用户的历史行为(比如浏览记录、购买记录等等)准确的预测出用户未来的行为;好的推荐系统不仅如此,而且能够拓展用户的视野,帮助他们发现可能感兴趣的却不容易发现的item;同时将埋没在长尾中的好商品推荐给可能感兴趣的用户。ConvNCF推…

西瓜书-决策树

决策树 决策树划分时,当前属性集为空,或所有样本在所有属性上取值相同,将结点标记为叶节点,其类别标记为当前样本集中样本数最多的类。 决策树算法的核心在于:选择最优划分属性 判别分类的三种情形: 当前…

[前端攻坚]:详解call、apply、bind的实现

call apply bind 的实现的面试中几乎必定出现的一些内容,今天来用一篇文章整理一下这里的内容,加深一下JS基础知识体系。同时文章也被收录到我的《JS基础》专栏中,欢迎大家点击收藏加关注。 call的实现 call() 方法使用一个指定的 this 值和单…