乐趣区

关于python:Python自学教程8数据类型有哪些注意事项

数据类型相对来说比较简单,然而有写注意事项不得不留神。

元组注意事项

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

# 元组
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 的时候,能够从数据类型动手,这样比拟容易减少信念,只有略微致力一点,多记一些相干的办法,能够迅速上手写代码。

退出移动版