整理了几个100%会踩的Python细节坑,提前防止脑血栓
B站|公众号:啥都会一点的研究生
哈喽我是啥都生,本期整理了几个极易忽视的Python细节,提前了解,帮你大幅缩短debug时间
case 1
给你三秒钟,告诉我这段程序的结果
case1 = [9, 8, 7, 3, 2, 2]case1 = case1.append(1)print(case1)
有同学笑了,你就拿这个考验干部,不就是末尾添加1吗
真的是这样吗,打印结果其实为 None,正确的写法应该是这样
case1 = [9, 8, 7, 3, 2, 2]case1.append(1)print(case1)
类似的列表操作还有clear(), insert(), sort(), reverse(), remove(), extend()
case 2
给你两秒钟,告诉我这个程序在干嘛
case2 = [9, 8, 8, 3, 3, 1]for i in case2:if i % 2 == 0:case2.remove(i)
是的,这段程序目的是将列表中的偶数过滤
这时有同学站起来抢答,输出[9,3,3,1]
我们打印看一下,发现有个偶数8幸存
>>> [9,8,3,3,1]
其实,因为列表是可变对象,当遍历到第一个偶数8时,确实会将其删除,但此时后面的内容将向前移动
第二个偶数8来到当前位置,而随着当前循环结束,将继续向后遍历,所以第二个8就这样被漏掉
通常通过定义新的列表存放结果,如列表推导式
case2 = [9, 8, 8, 3, 3, 1]case3 = [x for x in case2 if x % 2 != 0]
case 3
给你1秒钟告诉我结果
case3 = ['a', 'b', 'c', 'd', 'e']print(len(case3))
有同学经过前两个例子,这下拿不定了,想着这小子肯定有诈
如果这都犹豫,请原地重学python,自信点,这段程序就是输出列表长度
>>> 5
有的人喜欢将它写成这种形式,打印,没问题
case3 = ['a', 'b', 'c', 'd', 'e']print(len(case3))>>> 5
但是如果漏了个逗号,打印会发现,woc怎么不报错,但结果不对了
case3 = ['a', 'b' 'c', 'd', 'e']print(len(case3))>>> 4
打印case3看看现在长啥样,会发现b与c结合变一个字符串了
print(case3)>>> ['a', 'bc', 'd', 'e']
这就涉及字符串知识点,我们定义一个data等于b空格c,打印发现确实不报错,只是进行了拼接
效果等同于b+c
data = 'b' 'c'data_ = 'b' + 'c'print(data)print(data_)>>> bc
>>> bc
case 4
case4 = ('bilibili')for i in case4:print(i)
如果你认为程序输出字符串bilibili那么就又错了
打印发现它将每个字符逐个输出,打印case4的类型变成了字符串而非元组
case4 = ('bilibili')for i in case4:print(i)print(type(case4))
b
i
l
i
b
i
l
i
>>> <class 'str'>
我们加个tuple将其强制转换,打印看到类型是元组,但再次回到上述程序,发现结果还是不对
case4 = tuple('bilibili')for i in case4:print(i)print(type(case4))
b
i
l
i
b
i
l
i
>>> <class 'tuple'>
打印case4看看长啥样,然后终于发现了问题所在
case4 = tuple('bilibili')print(case4)>>> ('b', 'i', 'l', 'i', 'b', 'i', 'l', 'i')
所以,当你想实现在不可变对象元组中仅添加一个可变对象字符串,正确操作是加个逗号
case4 = ('bilibili',)for i in case4:print(i)
case 5
flag = Falseif flag:x, y = 10, 10
else:x, y = None, Noneprint(x, y)
乍一看很简单,定睛一看,也很简单,没问题
这时有同学站了起来说,都什么年代了,还在这if else,然后将程序改成了这样
flag = Falsex, y = (10, 10) if flag else None, Noneprint(x, y)
打印,不出意外的话没出意外
>>> None None
但将flag改为true时,意外来了
flag = Truex, y = (10, 10) if flag else None, Noneprint(x, y)>>> (10, 10) None
因为程序将这个部分看成一个表达
(10, 10) if flag else None
所以得不到想要的结果,正确的应该这样
flag = Truex, y = (10, 10) if flag else (None, None)print(x, y)>>> 10,10
整理了几个100%会踩的Python细节坑,提前防止脑血栓相关推荐
- [分类整理IV]微软等100题系列V0.1版:字符串+数组面试题集锦
微软等100题系列V1.0版整理IV:字符串+数组面试题集锦 July 2010年12月30日 第4章 字符串+数组面试题 在微软等100题系列V0.1版中,此类字符串+数组的问题,占了足足22道 ...
- UltimateDefrag磁盘碎片整理软件 v3.0.100.19汉化版
软件名称:UltimateDefrag磁盘碎片整理软件 v3.0.100.19汉化版 软件类别:汉化软件 运行环境:Windows 软件语言:简体中文 授权方式:免费版 软件大小:3.25 MB 软件 ...
- ArcGIS接边整理合并的1:100万基础地理信息数据
01 前言 前面我们介绍了<2021版1:100万基础地理信息数据更新(数据整理GDB批量合并)>.<QGIS一键加载100万基础地理信息数据导出>两篇文章,相信大家对这个数据 ...
- 踩了无数个坑,才写出稿费1000的文章
踩了无数个坑,才写出稿费1000的文章,早知道这些就好了,强烈推荐给小白的你. 挣钱难,大家都想靠副业多赚一份收入,比如现在流行的写作,可很多小伙伴都像无头苍蝇般,想要撞大运,殊不知已经踩到了坑,来看 ...
- python基础知识整理-整理了27个新手必学的Python基础知识点
原标题:整理了27个新手必学的Python基础知识点 1.执行脚本的两种方式 Python a.py 直接调用Python解释器执行文件 chomd +x a.py ./a.py #修改a.py文件的 ...
- 与webview打交道中踩过的那些坑
随着HTML5被越来越多的用到web APP的开发当中,webview这一个神器便日渐凸显出重要地位.简要的说,webview能够在移动应用中开辟出一个窗口,在里面显示html页面,css以及js代码 ...
- (转)Redis上踩过的一些坑-美团
上上周和同事(龙哥)参加了360组织的互联网技术训练营第三期,美团网的DBA负责人侯军伟给大家介绍了美团网在redis上踩得一些坑,讲的都是干货和坑. 分为5个部分: 一.周期性出现connect t ...
- Redis上踩过的一些坑-美团
上上周和同事(龙哥)参加了360组织的互联网技术训练营第三期,美团网的DBA负责人侯军伟给大家介绍了美团网在redis上踩得一些坑,讲的都是干货和坑. 分为5个部分: 一.周期性出现connect t ...
- 安装python爬虫scrapy踩过的那些坑和编程外的思考
'转载地址:http://www.cnblogs.com/rwxwsblog/p/4557123.html' 这些天应朋友的要求抓取某个论坛帖子的信息,网上搜索了一下开源的爬虫资料,看了许多对于开源爬 ...
最新文章
- “AI工厂”本质:AI基础设施及怎样将AI转化为运营动力
- 怎样增加混凝土粘聚性_改善中低强度等级混凝土粘聚性的方法
- java判断用户是否在某一个区域登录_Java实现QQ登录和微博第三方登录
- 用python画漂亮图片-Python 竟能绘制如此酷炫的三维图
- Android Studio 的 build 过程
- Mysql 索引底层原理
- MySQL默认数据库简介
- Java语言学习概述
- 【Flink】Flink 检查点 Triggering checkpoint createBlockoutputstream no further info information
- 华师大数据科学考研_华东师范大学数据科学与工程需要复习哪些内容?
- ROS学习笔记8(使用 rqt_console, rqt_graph 和 roslaunch)
- java各版本之间的差异_Java 8-13版本功能差异一览指南 - marcobehler
- 易筋SpringBoot 2.1 | 第十篇:SpringBoot使用thymeleaf入门
- 姜小凡:物理世界的数据越来越有价值
- 数学建模竞赛代码及论文降重方法
- Excel表格怎么随机打乱顺序
- NCPC 2015 - Problem A - Adjoin the Networks
- 码农架构 | Spring Boot 实现通用 Auth 认证的 4 种方式
- 软件工程大一学年简单的总结一下
- 编写一个简单Java程序,计算银行年存款的本息