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细节坑,提前防止脑血栓相关推荐

  1. [分类整理IV]微软等100题系列V0.1版:字符串+数组面试题集锦

    微软等100题系列V1.0版整理IV:字符串+数组面试题集锦 July   2010年12月30日 第4章 字符串+数组面试题 在微软等100题系列V0.1版中,此类字符串+数组的问题,占了足足22道 ...

  2. UltimateDefrag磁盘碎片整理软件 v3.0.100.19汉化版

    软件名称:UltimateDefrag磁盘碎片整理软件 v3.0.100.19汉化版 软件类别:汉化软件 运行环境:Windows 软件语言:简体中文 授权方式:免费版 软件大小:3.25 MB 软件 ...

  3. ArcGIS接边整理合并的1:100万基础地理信息数据

    01 前言 前面我们介绍了<2021版1:100万基础地理信息数据更新(数据整理GDB批量合并)>.<QGIS一键加载100万基础地理信息数据导出>两篇文章,相信大家对这个数据 ...

  4. 踩了无数个坑,才写出稿费1000的文章

    踩了无数个坑,才写出稿费1000的文章,早知道这些就好了,强烈推荐给小白的你. 挣钱难,大家都想靠副业多赚一份收入,比如现在流行的写作,可很多小伙伴都像无头苍蝇般,想要撞大运,殊不知已经踩到了坑,来看 ...

  5. python基础知识整理-整理了27个新手必学的Python基础知识点

    原标题:整理了27个新手必学的Python基础知识点 1.执行脚本的两种方式 Python a.py 直接调用Python解释器执行文件 chomd +x a.py ./a.py #修改a.py文件的 ...

  6. 与webview打交道中踩过的那些坑

    随着HTML5被越来越多的用到web APP的开发当中,webview这一个神器便日渐凸显出重要地位.简要的说,webview能够在移动应用中开辟出一个窗口,在里面显示html页面,css以及js代码 ...

  7. (转)Redis上踩过的一些坑-美团

    上上周和同事(龙哥)参加了360组织的互联网技术训练营第三期,美团网的DBA负责人侯军伟给大家介绍了美团网在redis上踩得一些坑,讲的都是干货和坑. 分为5个部分: 一.周期性出现connect t ...

  8. Redis上踩过的一些坑-美团

    上上周和同事(龙哥)参加了360组织的互联网技术训练营第三期,美团网的DBA负责人侯军伟给大家介绍了美团网在redis上踩得一些坑,讲的都是干货和坑. 分为5个部分: 一.周期性出现connect t ...

  9. 安装python爬虫scrapy踩过的那些坑和编程外的思考

    '转载地址:http://www.cnblogs.com/rwxwsblog/p/4557123.html' 这些天应朋友的要求抓取某个论坛帖子的信息,网上搜索了一下开源的爬虫资料,看了许多对于开源爬 ...

最新文章

  1. “AI工厂”本质:AI基础设施及怎样将AI转化为运营动力
  2. 怎样增加混凝土粘聚性_改善中低强度等级混凝土粘聚性的方法
  3. java判断用户是否在某一个区域登录_Java实现QQ登录和微博第三方登录
  4. 用python画漂亮图片-Python 竟能绘制如此酷炫的三维图
  5. Android Studio 的 build 过程
  6. Mysql 索引底层原理
  7. MySQL默认数据库简介
  8. Java语言学习概述
  9. 【Flink】Flink 检查点 Triggering checkpoint createBlockoutputstream no further info information
  10. 华师大数据科学考研_华东师范大学数据科学与工程需要复习哪些内容?
  11. ROS学习笔记8(使用 rqt_console, rqt_graph 和 roslaunch)
  12. java各版本之间的差异_Java 8-13版本功能差异一览指南 - marcobehler
  13. 易筋SpringBoot 2.1 | 第十篇:SpringBoot使用thymeleaf入门
  14. 姜小凡:物理世界的数据越来越有价值
  15. 数学建模竞赛代码及论文降重方法
  16. Excel表格怎么随机打乱顺序
  17. NCPC 2015 - Problem A - Adjoin the Networks
  18. 码农架构 | Spring Boot 实现通用 Auth 认证的 4 种方式
  19. 软件工程大一学年简单的总结一下
  20. 编写一个简单Java程序,计算银行年存款的本息

热门文章

  1. rancher视屏教程
  2. 使用GitHub的action将每日天气推送到微信和QQ
  3. 关于工作,工作效率。
  4. 超详细教程-Django使用邮箱发送验证码
  5. 用MFC写一个随机抽号的软件(VS2013)
  6. vue前端直接使用element-ui的upload组件上传到阿里云OSS存储
  7. PPT模板(2019推荐),16个高品质日本、欧美、韩国主题免费下载网站
  8. Microsoft Office Word、Excel 和 PowerPoint 2007 文件格式兼容包
  9. Lattice Diamond 生成VME文件
  10. 基于Spring框架的Wap门户网站设计思想(转)