只要实现了__len__和__getitem__两个方法即可将该类视为序列. 切片原理 动态存取属性 如果实现了__getattr__方法,也要定义__setattr__方法,以防对象行为不一致…
第四部分第10章,序列的修改.散列和切片 中文电子书P423 这一章接第1章.第9章,以第9章定义的Vector2d类为基础,定义表示多为向量的Vector类.这个类的行为与Python中标准的不可变扁平序列一样.Vector实例中的元素是浮点数,本章的Vector类将支持以下功能 基本的序列协议--__len__和getitem 正确表述拥有很多元素的实例 适当的切片支持,用于生成新的Vector实例 综合各个元素的值计算散列值 自定义的格式语言拓展 通过__getattr__方法实现属性的动…
前面在介绍了类的很多内置方法,比如__add__,__eq__,这里继续介绍类的两个内置方法,这2个内置方法可以将一个类实例变成一个序列的形式.代码如下 class vector(object):     def __init__(self,components):         self._components=components         print self._components     def __len__(self):         return len(self._c…
新Vector类 接原vector类定义的新Vector类,原向量类是二维,现定义多维向量类: from array import array import reprlib import math class Vector: typecode = 'd' shortcut_names = 'xyzt' def __init__(self, components): self._components = array(self.typecode, components) def __iter__(s…
python内置序列类型概览 列表推导和生成器表达式 列表推导是构建列表的快捷方式,而生成器表达式可以用来创建其他任何类型的序列 列表推导的示例 >>>test = [i*2 for i in range(3)] >>>test [0,2,4] 使用列表推导通常的原则是,只能列表推导来创建新的列表,并且尽量保持简短. python2中列表推导可能有变量泄露问题,而python3解决了变量泄露问题 列表推导和map/filter的对比 生成器表达式 虽然也可以用列表推导来…
学习记录day03   字符串可以直接切片,But字符串不可修改 字符串修改:生成了一个新的字符串 LIst修改,在原基础上修改(原内存上)     集合是一个无序的,不重复的数据组合,它的主要作用如下:   去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 dict\list\set.. 全用 x in ..计算,,dict.has_key等已废   文件: fp = open() #文件句柄,文件句柄里存的内容: 文件信息.在磁盘上的开始位置.内存等…
Vector类:用户定义的序列类型 我们将使用组合模式实现 Vector 类,而不使用继承.向量的分量存储在浮点数数组中,而且还将实现不可变扁平序列所需的方法. p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Helvetica } Vector 类的第 1 版要尽量与前一章定义的 Vector2d 类兼容. p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 25.0px Helvetica }…
描述符是对多个属性运用相同存取逻辑的一种方式.例如,Django ORM 和 SQL Alchemy等 ORM 中的字段类型是描述符,把数据库记录中字段里的数据与 Python 对象的属性对应起来.描述符是实现了特定协议的类,这个协议包括 __get__.__set__ 和 __delete__ 方法.property 类实现了完整的描述符协议.通常,可以只实现部分协议.其实,我们在真实的代码中见到的大多数描述符只实现了 __get__ 和 __set__ 方法,还有很多只实现了其中的一个. 描…
序列修改,散列和切片 基本序列协议:Basic sequence protocol: __len__ and __getitem__ 本章通过代码讨论一个概念: 把protocol当成一个正式接口.协议概念和鸭子类型的关系.当创建自定义类型时,它的实际影响. Vector类,一个自定义的序列类型 我们的实现Vector的策略是使用composition(组合),而不是继承. 10.3 序列和鸭子类型 协议是非正式的接口,只在文档内定义,在代码中不定义. 例如,序列协议在Python只需要__le…
第1章 python数据模型 python的写法是由背后的魔法方法实现的,比如obj[key],解释器实际调用的是obj.__getitem__(key) 作者把魔法方法叫做双下方法,因为有两个下划线 collections.namedtuple可以用来创建只有少数属性但没有方法的对象,比如 beer_card = Card('7', 'diamonds') random.choice和random.sample不一样的地方在于,sample是返回序列,choice是返回元素,当使用sample…