不知不觉,python自学教程已经更新到第八篇了,再有几篇,基本的语法就介绍完了。 今天来总结一下数据类型有哪些需要注意的地方。

元组注意事项

元组是另一种经常使用到的数据类型,看上去和列表差不多。它们之间的区别在于列表是一个可变的数据类型,而元组是不可变的。

#元组
a = (1, 2)
#列表
a = [1, 2]

使用列表会更灵活,而元组支持的操作更少,有的人会认为没有必要用元组,直接用列表就可以了。

但正因为元组不可变,限制了功能,从效率上来讲它会更加快一些,而且,当你不想让用户去修改这个数据的时候,用元组会更合适,数据相对来说更加安全,不容易出bug。

使用元组的时候一定要记得在元素的后面加逗号,当一个元组只有一个元素的时候,后面不打逗号,是不能表示成元组的,而是元素本身的类型。

a = (1)  # 等于 1
a = (1,) #这才是元组

浮点数注意事项

在编程语言当中,浮点数的精度往往不能达到完全的精确,这会给我们编程带来一些问题,甚至呢可能带来很大的bug。比如说我们现在计算一个很简单的小数点的运算,0.1+0.2,大家可以先回答一下这个应该等于多少呢?

print(0.1 + 0.2)

很明显这是一个小学的数学题,但是呢,当我们交给Python去运算的话呢,我们得到结果并不是等于0.3而是等于

0.30000000000000004

这是计算机在表示十进制小数的时候会出现误差。

从直观的感受上看,这种精度好像造成不了太大的影响。但是,在对数据要求非常严格的情况下,这种误差会引发打的问题,尤其是在做测试的时候,如果你你的预期结果和实际结果都不相等,那么你测试用例肯定是不会通过的。

在操作银行、证券这类金融业务时,涉及到支付和钱的时候一定要有非常严格的精度控制。 此时,可以使用 decimal 模块来保持高精度,我们把需要操作的浮点数先转换成字符串,再作为参数传给 Decimal 类。

from decimal import Decimal
print(Decimal("0.1") + Decimal("0.2"))
# 0.3

除法注意事项

在进行除法运算的时候,一定要牢记:被除数是不能等于0的。

当你把0作为一个被除数的时候,程序是会报错的。

print(3 / 0)

列表注意事项

面试题当中列表问题出现的概率应该有80%以上,因为列表的操作非常频繁,而且比较容易出错,现在我们就来看一个经典问题:删除列表元素。

有一个列表如下,请删除列表当中的每一个元素,但是不能直接用clear方法。

names = ["九柄", "八柄", "七柄","六柄","五柄"]

按照条件反射,我们一般会写一个 for 循环,然后依次执行remove方法或者 pop 方法来删除元素。但是这样得到的结果是不对的,总有几个元素删除不掉。

for name in names:
    names.remove(name)
print(names)
# ["八柄", "六柄"]

为什么会删不干净呢?最核心的原因是:删除掉一个元素之后,这个列表发生了变化。

第1次,我们取到的元素是索引为0的 “九柄”, 它被删掉了之后, 接下来去取索引为 1 的元素,因为“九柄” 已经被删除,所以索引为0的元素已经被替换成 "八柄", 索引为1 的元素则为”七柄“, 七柄被删,八柄跳过去了,没有被删除。

然后,取索引为 2 的数据,为 ”五柄“, ”六柄“ 又被跳过了,从而造成删除不干净的情况。

从这个例子当中我们得出一个结论,不要在for循环当中去修改列表删除列表或者增加元素,这样非常容易出 bug。那上面的问题如果我们想解决怎么办呢?在我们去操作一个列表的时候,我们最好是做一个备份,不直接去修改原来的列表。

for name in names[:]:
    names.remove(name)
print(names)

可变类型和不可变类型

实际上大多数的可变类型虽然增加了灵活性,有更多的操作,但是更容易出bug。在我个人的编程过程当中,我会尽量使用不可变类型。

为了区分可变类型和不可变也行,我们举几个例子。

a = [1, 2, ("a", "b")]

此时,a 是列表,是可变类型,可以任意添加、修改其中的元素,比如把索引2的元素换成 c

a[2] = "c"
# [1,2,'c']

但是,不能改 ("a", "b") 当中的元素,因为它是个元组。

a[2][0] = "c"  # 报错

总结

总的来说数据类型是难度比较低的内容,只有很多方法比较难记。在开始学Python的时候,可以从数据类型入手,这样比较容易增加信心,只要稍微努力一点,多记一些相关的方法,可以迅速上手写代码。

Python自学教程8-数据类型有哪些注意事项的更多相关文章

  1. Python自学教程1-安装pycharm和执行环境

    Python虽然简单,但是很多没有接触过的学起来还是比较困难的.因此很多人会报班去学,我觉得不需要花那个钱,只要方向正确,加上核心知识点的提炼,自学一个月左右就能上手. 我尝试写下这个自学教程,只讨论 ...

  2. Python自学教程2:大牛们怎么写注释

    在还没开始学代码前,就要先学会写注释.不会写注释的程序员会遭到鄙视和唾弃,甚至在工作中会被人穿小鞋.注释也不是随便写一下就行,用好注释还是有点讲究的. 注释有什么用? 注释(Comments)主要是向 ...

  3. Python自学教程5-字符串有哪些常用操作

    任何编程语言,不管是Python.Java 还是 Golang, 字符串都是最重要的一种数据类型. 但是字符串的操作又很多,初学者经常毫无头绪,不知道从哪儿学起,也不知道哪些操作用得多,今天九柄就和你 ...

  4. Python自学教程7:字典类型有什么用

    字典是Python中的一个重要操作,如果字典玩得顺,很多其他的数据类型就可以一通百通. Python字典的定义 字典使用一对大括号进行定义,键值对之间使用逗号隔开,键和值使用冒号分隔. 键必须是不可变 ...

  5. Python自学教程12-类和对象怎么用

    Python是一门现代化的编程语言,也是一门面向对象的编程语言. 现代编程语言几乎都支持面向对象编程,面向对象编程是最有效的软件编写方法之一.你可以用类和对象来表示现实当中的任何的事物和行为. 编写类 ...

  6. Python 简明教程 --- 4,Python 变量与基本数据类型

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 任何一个人都会写出能够让机器理解的代码,只有好的程序员才能写出人类可以理解的代码. -- Marti ...

  7. [ Python入门教程 ] Python字典数据类型及基本操作

    字典是Python中重要的数据类型,字典是由"键-值"对组成的集合,"键-值"对之间用逗号隔开,包含在一对花括号中.字典中的"值"通过&qu ...

  8. Python学习教程(一)自学资源分享

    Python 可以用来做什么? 在我看来,基本上可以不负责任地认为,Python 可以做任何事情.无论是从入门级选手到专业级选手都在做的爬虫,还是Web 程序开发.桌面程序开发还是科学计算.图像处理, ...

  9. Python自学编程开发路线图(文中有免费资源)

    Python核心编程 免费视频资源<Python入门教程>:http://yun.itheima.com/course/145.html Python 基础学习大纲 所处阶段 主讲内容 技 ...

随机推荐

  1. CSP J/S 初赛总结

    CSP J/S 初赛总结 2021/9/19 19:29 用官方答案估计 J 涂卡的时候唯一的一支 2B 铅笔坏了,只能用笔芯一个个涂 选择 \(-6\ pts\) 判断 \(-3\ pts\) 回答 ...

  2. ShardingSphere 异构迁移最佳实践:将3.5亿量级的顾客系统 RTO 减少60倍

    Apache ShardingSphere 助力当当 3.5 亿用户量级顾客系统重构,由 PHP+SQL Server 技术栈无缝转型为 Java+ShardingSphere+MySQL,性能.可用 ...

  3. 3.C++逐行读取txt文件数据,利用getline -windows编程

      引言:今天学会了getline的用法,顺手编写一个逐行读取txt文件的程序.关于getline的用法可以看我之前的博客:2.C++标准库函数:getline函数 定界流输入截取函数 -zobol的 ...

  4. 适配抖音!三角面转换和3d模型体量减小,轻量化一键即可完成!

    抖音3d特效,可谓是越来越火爆了,这个有着迪士尼画风的3D大眼,就刷屏了国内外用户的首页! 有人好奇这些特效究竟是怎么制作的?其实就是把3D模型调整适配到头部模型上,调整位置或者大小就可以制作出一个简 ...

  5. ant design pro生产和开发环境的坑

    1.axios的get请求开发环境会自动带上cookie,但是生产环境则不会,需要手动设置以下代码: axios.defaults.withCredentials=true; 2.models全局和局 ...

  6. UiPath条件判断活动Flow Decision的介绍与使用

    一.Flow Decision介绍 FlowDecision节点是一个条件节点,它根据指定条件是否成立来控制流程的两个分支. 当条件为True时,流程执行一个分支 当条件为False时,流程执行另外一 ...

  7. PTA(BasicLevel)-1094 谷歌的招聘

    一.问题定义 2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘.内容超级简单,就是一个以 .com 结尾的网址, 而前面的网址是一个 10 位素数,这个素数 ...

  8. 一键部署bash脚本怎么写

    因为我开源的一键部署应用到linux服务器的AntDeploy, 在linux部署是需要安装一个agent服务(systemctl服务) 如果是手动第一次安装的话 需要敲 下载 wget 解压 tar ...

  9. The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 40976EAF437D05B5 NO_PUBKEY 3B4FE6ACC0B21F32

    apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32

  10. Kafka 部署完在服务器端可以访问,而在外部其它电脑访问不了

    Kafka 部署完在服务器端可以访问,而在外部其它电脑访问不了 原因:config/server.properties的listeners和advertised.listeners 不配置的话默认的l ...