总结
1、特殊方法,又称魔术方法(magic method):一般以__xxx__的形式表示,使得我们可以让自己的对象实现和支持以下的语义架构,并与之交互:
- 迭代
- 集合类
- 属性访问
- 运算符重载
- 函数和方法的调用
- 对象的创建和销毁
- 字符串表示形式和格式化
- 管理上下文(即with块)
利用特殊方法来实现python数据模型的优点:不必记标准操作的名称;可以方便地利用标准库。
特殊方法的存在是为了被python解释器调用的。
2、序列
容器型序列:list、tuple和collections.deque能存放不同类型的数据
扁平序列:str、bytes、bytearray、array.array,只能放一种类型
容器序列存放的是它们所包含的任意类型的对象的引用,而扁平序列里存放的是值而不是引用。换句话说,扁平序列其实是一段连续的内存空间。由此可见扁平序列其实更加紧凑,但是它里面只能存放诸如字符、字节和数值这种基础类型
列表生成式:[function for x in xxxxx]
生成器生成式:(function for x in xxxxx)
元组:不仅可以做不可变列表,还可用作数据记录。
python中不使用中间变量交换两个变量值的最简单写法:b,a = a,b
可以用*运算符把一个可迭代对象拆开作为函数的参数:
>>> divmod(20, 8)
>(2, 4)
>>> t = (20, 8)
>>> divmod(*t)
> (2, 4)
在进行拆包的时候,我们不总是对元组里所有的数据都感兴趣,_占位符能帮助处理这种情况。
接受表达式的元组可以是嵌套式的,例如(a, b, (c, d))。只要这个接受元组的嵌套结构符合表达式本身的嵌套结构
('Tokyo','JP',36.933,(35.689722,139.691667)), # for name, cc, pop, (latitude, longitude) in metro_areas: #
命名元组
collections.namedtuple是一个工厂函数,它可以用来构建一个带字段名的元组和一个有名字的类
创建一个具名元组需要两个参数,一个是类名,另一个是类的各个字段的名字。后者可以是由数个字符串组成的可迭代对象,或者是由空格分隔开的字段名组成的字符串。
City = namedtuple(‘City’, ‘name country population coordinates’)
几个最有用的属性和方法:_fields类属性(:_fields属性是一个包含这个类所有字段名称的元组)、类方法_make(iterable)(:用_make()通过接受一个可迭代对象来生成这个类的一个实例,它的作用跟City(*delhi_data)是一样的)和实例方法_asdict()(:_asdict()把具名元组以collections.OrderedDict的形式返回,我们可以利用它来把元组里的信息友好地呈现出来)。
多维切片
省略(ellipsis)的正确书写方法是三个英语句号(…),而不是Unicdoe码位U+2026表示的半个省略号(…)。省略在Python解析器眼里是一个符号,而实际上它是Ellipsis对象的别名,而Ellipsis对象又是ellipsis类的单一实例。2它可以当作切片规范的一部分,也可以用在函数的参数清单中,比如f(a, …, z),或a[i:…]。在NumPy中,…用作多维数组切片的快捷方式。如果x是四维数组,那么x[i, …]就是x[i, :, :, :]的缩写。