数据类型比较简单,但是有写上的注意事项必须要注意。元组注意事项元组是另一种常用的数据类型,看起来类似于列表。它们之间的区别在于列表是可变数据类型,而元组是不可变的。#tuplea=(1,2)#lista=[1,2]使用list更灵活,tuple支持的操作更少。有人觉得不用元组,直接上去用列表就可以了。但是正因为元组是不可变的,限制了功能,所以在效率上会更快。而且,当你不想让用户修改数据的时候,用元组比较合适,数据也相对安全一些。制造错误并不容易。使用元组时,一定要记得在元素后加一个逗号。当元组只有一个元素,后面没有逗号时,不能表示为元组,而是元素本身的类型。a=(1)#等于1a=(1,)#这是元组浮点数。它可能会带来一个大错误。比如我们现在计算一个很简单的小数点运算,0.1+0.2,你可以先回答这个应该等于多少?print(0.1+0.2)明明是小学的数学题,但是当我们把它交给Python计算的时候,得到的结果不等于0.3而是等于0.300000000000000004这是计算机在表示小数的时候会做的发生了错误。从直观的角度来看,这个精度似乎并没有太大的影响。但是在对数据要求非常严格的情况下,这个错误会带来问题,尤其是在做测试的时候。如果你的预期结果和实际结果不相等,那么你的测试用例肯定不会通过。在经营银行、证券等金融业务时,在支付和资金方面必须有非常严格的精度控制。此时可以使用decimal模块来保持高精度。我们先把要运算的浮点数转换成字符串,然后作为参数传给Decimal类。fromdecimalimportDecimalprint(Decimal("0.1")+Decimal("0.2"))#0.3除法注意事项在进行除法运算时,一定要记住:被除数不能等于0。当你用0作为被除数时,程序会报错。打印(3/0)列表注意事项面试题中出现列表问题的概率应该在80%以上,因为列表操作非常频繁,容易出错。现在我们来看一个经典的问题:删除列表元素。有一个列表如下,请删除列表中的每一个元素,但是不能直接使用clear方法。names=["九把柄","八把柄","七把柄","六把柄","五把柄"]我们通常根据条件反射写一个for循环,然后在里面执行remove方法或者pop方法转向删除元素。但是这样得到的结果是错误的,总有几个元素不能删除。fornameinnames:names.remove(name)print(names)#["八把柄","六把柄"]为什么删不干净?核心原因是:删除一个元素后,列表发生了变化。第一次,我们拿到的元素是索引为0的“九把”,删除之后,我们去取索引为1的元素,因为“九把”已经被删除了,所以索引为0的元素了元素已替换为“八柄”,索引为1的元素为“七柄”,删除七柄,跳过八柄,不删除。然后,取index为2的数据,也就是“五句柄”,再次跳过“六句柄”,导致不干净删除。从这个例子中,我们得出一个结论,不要在for循环中修改列表、删除列表或添加元素,非常容易出bug。那么如果我们要解决上面的问题怎么办呢?我们在操作列表的时候,最好做好备份,不要直接修改原来的列表。fornameinnames[:]:names.remove(name)print(names)mutabletypesandimmutabletypes实际上,尽管大多数可变类型增加了灵活性并具有更多操作,但它们更容易出现错误。在我个人的编程中,我尽量使用不可变类型。为了区分可变类型和不可变类型,我们举几个例子。a=[1,2,("a","b")]此时a是一个list,是一个变量类型,里面的元素可以任意添加和修改,比如替换处的元素index2withca[2]="c"#[1,2,'c']但是("a","b")中的元素不能改变,因为它是元组。a[2][0]="c"#报错总结一般来说,数据类型属于难度比较低的内容,只有很多方法比较难记。开始学习Python时,可以从数据类型入手,这样更容易增加信心。只要稍微努力一点,记住一些相关的方法,就可以很快的手写代码了。
