- 推导式 comprehension
- 异常处理 try-except-else-finally
- 深浅拷贝
- 迭代器
- 序列化与反序列化
- timeit和Profiling
推导式
- 列表推导式
- [x for x in range(10) if X % 2 == 0]
- 集合推导式
- {x for x in range(10) if X % 2 == 0}
- 字典推导式
- {x: x**2 for x in range(10) if x % 2 == 0}
- 生成器表达式
- (x for x in range(10) if x % 2 == 0)
异常处理
- Exception 常规错误父类
- BaseException 内置错误的父类
- tr-except
try: 测试执行代码... except Exception: 异常处理流程... else: ... finally: ...
- 自定义异常 ?
深浅拷贝
b=100
a=b
此时的赋值只是将变量a和b的指向到了存储100的地址
当a为列表时,更改a的值会同时更改b的值,具体原因待明确,应该和list的实现有关
copy()只针对当前变量的地址,针对变量内部的隐形指向地址不做更改
deepcopy()可以实现新地址的拷贝
from copy import copy,deepcopy
a=[1,["a","b"]]
b=a
c=copy(a)
d=deepcopy(a)
a.append(5)
a[1].append("c")
#a [1,['a','b','c'],5]
#b [1,['a','b','c'],5]
#c [1,['a','b','c']]
#d [1,['a','b']]
迭代器
返回可迭代对象,用for循环迭代或者复制给list
- map()
- range()
序列化与反序列化
- 将数据以JSON格式保存到文件中(使用Unicode文本)
- 将对象在某一状态下“冻结”,以二进制形式写入文件,保存到硬盘中
- 反序列化
import pickle #二进制文件转换
a=[1,2,3]
b=pickle.dumps(a)
print(b) #b'\x80\x03]q\x00(K\x01K\x02K\x03e.'
c=pickle.loads(b)
print(a==c) #true
timeit和Profiling
- 性能分析Profiling
- CPU
- GPU
- 计算方法
- from time import timeit #系统时间
- from time import clock #windows
from time import time start =time() s=0 for i in range(100000): s=s+i end= time() print("time:%.4f s" %(end-start))
- from timeit import timeit #timeit 完成任务的时间,不包括后续结尾工作
from timeit import timeit print(timeit('for i in range(20):print i,globals=globals()))
- import profile
- from time import timeit #系统时间