流畅python(一)—数据模型,内置函数

  1. 首先明确类的方法的构造:为了类封装性以及方法的封装性,类的方法里面使用的都是内置的函数外面import导入的函数以及后面自己构造的函数,更为重要的是处理的数据要么是self.__init__里面的数据,要么是传入的数据,要么是其它类函数返回的数据。总之就这么几种情况,首先要明白。那么以后自己书写类里面的函数一定要这样处理
  2. 以后遇到python相关的问题,尽量用类来处理,心中的思想就是和java是一致的,万物皆对象;处理的步骤就直接定义类,init函数,考虑好需要传入的初始化的参数,外面初始化(传入),之后进行函数体等构造。
  3. 对于内置函数所对应的特殊函数总计87个,计算相关的43,非计算的44个。每一个特殊函数都对应有我们程序员可以调用的内置函数,而本省特殊函数时解释器调用的。我们当然可以直接调用所有内置函数,但是有些内置函数我们不必通过直接调用来获取值。如__getitem()__这个特殊函数所对应的内置函数为for循环获取其中的元素时候系统自己调用内置函数,也就是说一些特殊函数是通过某种形式调用的,而不是直接调用(当然可以直接调用)
  4. 要想通过调用内置函数能得到相应的结果,那么必须在这个类里面实现好内置函数相应的特殊函数,这样的调用才有效果,所以要想清楚明白清晰的调用内置函数,就必须将87个特殊函数的调用场景有所知晓,甚至可以说非常了解什么情况下会触发系统自己调用特殊函数,这个后面会慢慢的体会。
  5. 比如list这个类是python实现好的的。我们使用list + list,它的效果当然是list之间进行合并,但是为什么它会合并呢?因为这个+这个内置函数的特殊函数是__add__,所以在里面一定实现过list 和list的+操作,但是当我们Ctrl查询这个list类的时候,类内部每一个方法的函数体都是pass没有函数体的实现。那么啥也没有函数如何执行呢?其实时这样的,python实现有的是通过python实现的,通过python实现的话我们Ctrl查询里面时有python代码的,另外一种就是直接通过C实现的,这样打开就是没有代码的只有pass,以后见到里面只有pass没有代码的就是C/C++实现的。用C实现的方法真正的代码在其它的地方,我们Ctrl打开的只是一个说明,说明这个函数能干吗,不是真正的地方。但是对于python实现的Ctrl查询就是正确的地方了,这个要注意。所以list里面的一些特殊函数都实现了,只不过用C,我们看不到而已。
  6. 最后要深入理解python的一致性,这是python最核心的特性。我们处理内置函数的根本目的就是为了一致性,就是为了任何类都能按照基本的数据类型进行基本的内置函数的操作,在类内只有实现内置函数所对应的特殊函数才能按照内置函数访问形式进行访问,这里的访问形式我们会慢慢的学习。

在这里对python里面的基本数据类型和基本的数据结构进行一个说明

  • 数据类型:int() (Long也包括在int里面), float()(就是Double的8个字节的双精度浮点数,可以用round()函数限定为实际的float),bool(), chr()将数字转化为unicode字符,   str,   bytes,   bytearray.
  • 数据结构:list , tuple, array.array,  set,    dict,

上面的数据类型不仅仅有基本的数据类型,还有序列的数据类型,所以我们基于上述将序列类述结构分为如下几种:

  • 不可变数据结构:str, bytes, tuple   ,当然包括数据类型,但是这里说的是序列类的数据结构。
  • 可变的数据结构:  bytesarray,  array.array, list,  set,  dict       注意:可变的数据类型拥有哪些常见的方法 如pop, append, extend等方法。

从另外一个角度分类

  • 扁平的序列数据结构:str、bytes, bytesarray, array.array
  • 容器类序列数据结构:tuple, list, set, dict
  • 扁平的数据结构是因为里面存储的数据都是最基本的数据类型,即数据类型是原子的数据类型,只能是  int, float, bool, bytes, chr类的,里面存储的就是直接是数据,不是引用,这点一定要注意。
  • 而容器类数据结构立案存储的就是引用,且里面存储的数据一般都是非原子数据,如果是原子数据,当然使用容器序列也可以处理,但是性能有时候不太好,因为扁平序列为特殊的数据类型的处理i做出了优化,这就是array.array在流畅的python41页提出的当列表不是首选的意义
  • 所以一定要注意:当容器类数据类型遇到可变数据类型,一定要注意内部存储的是引用,这点非常重要。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值