杂乱的数据

1.colletions 类中的namedtuple 示例:

import collections 
card = collections.namedtuple('card',['rank','suit'])
beer_card = card('7','diamonds')
print(beer_card)
//output:card(rank='7',suit='diamonds')

2.reversed 反向迭代方法 

3.for 循环嵌套的另一种使用方法

x = [1,2]
y = ['a','b']
card = [[a,b] for a in x for b in y]
print(card)
//output:[['a',1],['a',2],['b',1],['b',2]] 

3.__str__()特殊函数是在str()函数被调用或者print()调用时才返回字符串

 __repr__()当在终端中直接调用对象时返回字符串

 最好至少实现__repr__() 因为解释器在找不到__str__时会用__repr__代替

4.生成器表达式适合用在数据量大的场合,不像列表表达式会一次性产生所有数据列表。

5.元组拆包,例如用for提取元组里的元素,可以用占位符‘_’过滤掉不需要的元素

6.具名元组的一些方法和属性:

/*
_fields:包含这个类所有字段名称的元组
_make():接受一个可迭代对象生成实例
_asdict():以collections.OderedDict的形式返回
*/

7.切片是包含开头不包括结尾的元素。

8.如果赋值的对象为切片,那么,右侧的对象必须是可迭代的

l = [1,2,3,4,5]
l[2:5] = 5   //Error

9.'+'和‘x’对序列的操作,均不会改变原序列,取而代之会生成一个新的序列。

10.对不可变对象进行拼接或者重复操作,效率会很低的原因就是不可变对象拼接操作会生成一个新的对象,但是可变对象不会。

l = [1,2,3]
id(l) // output:3072474988
l *= 2
id(l) //output:3072474988

l = (1,2,3)
id(l) //output:3072494964
l *= 2
id(l) //output:3071726524

11.数组 array.tofile 和 fromfile分别写入二进制文件,和读取二进制文件。

12.可散列的:散列值不变,实现了__hash()__方法和__eq__()方法。这个涉及到字典的键,字典的键必须是可散列的,也就是唯一的,不可变的。

13.装饰器在被装饰的函数定义之后或者导入后立即执行(在main函数之前),而函数只有在明确调用时才执行(例如在main函数中调用)。

14.在闭包中,对不可变类型重新赋值会破坏闭包,将自由变量变成局部变量,需要在函数中的函数加上nonlocal声明。(只适用于python3)

15.'=='比较的是值,'is'比较的是对象的标识。'is'的速度比'=='快,因为'=='需要调用特殊方法'__eq__()'。

16.元组中的值不可变指的是元素的标识不可变,即内存地址。多提一句,对元组使用'+='会新建一个元组对象,与原来的元组对象不是一个东西。

17.del语句删除名称,不删除对象。

18.弱引用不会增加引用数量。

19.format和str.format()方法其实是调用内置的特殊方法__format__(format_spec)。其中,format_spec指的是format(obj,format_sepc)中的第二个参数,以及str.format()格式化字符串的{}中替代字段中冒号后面的部分。

20.slice()方法里的indices()能有效地处理序列边界问题。

21.处理数据时,在赋值时将可迭代数据放进list容器中,会创建副本,而不修改原数据。

22.不要直接子类化内置类型,例如,dict、list、str等,因为内置类型的方法会忽略用户覆盖的方法,应该使用collections模块中的UserDict、UserList、UserString类。

23.MRO:假设有A类,B,C继承自A类,B,C类有同名方法,D继承自B,C类,如果写作D(B,C)那么MRO会先搜索B类,在搜索C类,最后A类。反之亦然。

24.序列可以迭代是因为有iter(x)函数。检查对象是否实现__iter__,如果没有但是实现了__getitem__,那么创建迭代器。

25.Python从可迭代的对象中获取迭代器。__next__返回下一个可用元素,__iter__返回self。只要含有yield关键字,函数就是生成器函数。

26.iter(obj,flag) 第一个参数为无参的可调用对象,用于不断调用 第二个参数为标记值,当对象返回这个标记值,停止。

27.with 上下文管理器,通过在类中实现__enter__(self)和__exit__(self,exc_type,exc_value,traceback)使用。

posted @ 2019-09-06 15:46  waynr  阅读(261)  评论(0编辑  收藏  举报