11.09 有序无序的界定就是序列是否能通过下标访问
元组 tuple:有序不可变(封口的瓶子)、数据类型不限还可嵌套、逗号很必要、不可变因此安全性高、小括号
创建方法:
1.A=tuple((x,y,z,,,))
2.A=(x,y,z,,,)
3.A=x, y, z,, 括弧可以省略
元组的运算:'+':拼接两个元组,'×'元组乘以一个数字可以得到重复次数的新的元组
列表 list: 有序可变(杯子)、安全性差灵活性高、中括号
创建方法:
1.List = list((obj1,obj2,obj3,...))
2.List = [obj1,obj2,obj3,...]
3.列表推导式
列表常用操作(翻阅文档查看即可 )
注意数组与列表的区别
字典 dict:键值对,无序可变、键不可变且唯一
创建方式:
1.Dict={key:value,}
2.Dict=dict(key=value,)
3.Dict=dict([(key,value),])
常用操作
exercise:如何获取字典中的值?
最好使用dict.get(key, default = None) 也有第二种方式是dict[键名称] 但该方式一般不用
11.10
集合set 值唯一,无序 set={obj1,obj2,,,}
3.2 python中数据的常用操作
3.2.1数据拷贝知识
背景:数据引用时,是直接带地址引用,因此L1=L2赋值后,L1和L2存在于同一地址了,数据拷贝就是为了避免这一现象
注意:元组和字符串无法用copy
11.11
python中的运算符
成员运算符 in
身份运算符 is 比较存储单元
==是用于判断值是否相等,不需要是同一个地址
11.12 Python中的函数
类型:-内建函数 input\print\map\reduce
-用户自定义函数 def\lamda
-第三方工具包的函数s
python中函数的返回值与c有些不同:
11.23
1.2python中的函数续
※函数参数
注意不同参数的摆放位置,同时*args要放在**kwargs前
※全局变量和局部变量
1.3 匿名函数
如何定义匿名函数
#lambda 参数:函数体
只能写一行代码,参数可以很多
1.4 python函数的特点
1.函数本身可以作为参数和返回值
2.python程序的执行过程:
-自上而下;
-函数体在调用时才会被执行;
1.5高阶函数
高阶函数:某个函数作为另一个函数的参数,python中的自带的高阶函数,map,reduce,sorted,filter
map函数
reduce函数
map是单独计算的,reduce是累积计算
filter函数
sorted函数(不会改变原列表,可以自定义排序方法)
2.2面向对象和面向过程
动态添加类的属性和方法能影响对象,动态添加对象的属性和方法不会反过来影响类
very important
11.26
2.4魔法方法
可以视为在object类中的
2.5设计模式
单例模式
工厂模式
观察者模式
11.27 发明轮子和造轮子
※3.1轮子和模块
一个轮子可以有很多个模块,模块多为.py文件,轮子就是package
轮子:工具包就是轮子,子工具包就是模块
代码层面来看,模块是较高的单元,封装代码
init是初始化工具包或模块的
顶层文件是项目启动文件
需要避免导入模块的循环导入 ,导入的模块不一定是python写的
import后可加package名或module名
B不一定需要进入以下几个路径,此课程暂未介绍
※3.2 python中常用的内置工具包
os库
chdir(path) ../ (.路径往前,/路径往后)
sys库
可以采用sys.path.append加入你想要的模块路径
sys.argv:从程序外部向程序传递参数,参数以列表的形式传递,第一个为当前文件名
input已经进入程序内部了
11.28 python也要你的文件读写权限
4.1文件读写操作
文本、图片、音频、数据文件
12.03
4.2上下文管理器 with是上下文管理器
with 后的语句需要缩进,不需要关闭。
常见格式的数据文件操作
图片数据
得到图片像素点的方法:
音频数据
数据文件
得到dataframe数据
5.1 python小技巧
字符串对象池
简单字符串:字符串中不包含空格和特殊符号
12.6
5.2垃圾回收
“引用计数”,“标记-清除”,“分代回收”
python应用篇
1.1正则表达式
正则表达式书写规则
利用下图的符号可以构成一个很复杂的字符串
^开头,$结尾
身份证匹配不太好用
非贪婪操作符“?”
1.2 re模块
12.7
3.1 异常与错误
自定义异常可以从exception继承
12.08
3.2程序调试
__name__="__main__"有什么用?
assert
arguments是抛出错误的名称,assert比print高级在它能一键屏蔽assert语句
因为assert一上线就会被屏蔽,因此尽量避免用它做逻辑和数据的验证,仅用它来判断某些数据规则。
断点
单元测试
内置assert方法
12.09
4.1 迭代器和生成器
迭代概念
可迭代对象概念
双下划线:魔法方法
除了使用.__jter__也可以使用 isinstance(xxx, Iterable)判断xxx是否是iterable中的一个实例
迭代器
可迭代对象不一定是迭代器(不一定有next方法),迭代器一定是可迭代对象,因为它实现了iter方法
iter()可以获取迭代器对象 iter(list())即可将可迭代对象变为迭代器
(列表推导式)即可产生生成器
生成器和迭代器不同,他是用多少取多少数据
12.11 装饰器
1.闭包
闭包:内部函数引用外部作用域的变量
func传入装饰器函数,作为其参数
左边写法为装饰器,右边闭包,装饰器仅为闭包的一种形式
@后为装饰器,def为被装饰函数
装饰器的作用是给其他函数添加一些功能
运行到@xxx后,python会检查后续是不是函数或类,因为装饰器可以装饰函数或者类,若是,则执行xxx
@light和def person()即可视作light(person)。经过装饰器修饰后,person()即为tiga()
如何避免丢失?
用装饰器来增加功能,warps的内置模块,解决用装饰器而导致原信息丢失的问题
当被装饰函数有参数如何解决
当被装饰函数拥有参数,内函数也需要拥有参数
如何构建一个通用装饰器?1.加入wraps 2.加入不定长参数 *args
为Singleton类添加了单例模式(singleton(cls,*args,**kw))
多个装饰器如何执行?
wraps还会保留person原来的信息
12.13 开始学习站在巨人的肩膀上
2.1 numpy
数据类型支持的比python多
切片与索引
左闭右开原则
random模块
12.14
2.2 pandas
series
Dataframe:创建,获取数据,映射,排序,常用方法,常用统计方法
但应该避免主动产生缺失值
Dataframe如何获取数据?
映射:将函数应用于Dataframe的每一个行或列上
排序:
缺失值处理方法:
2.3 Matplotlib
图像结构
绘图步骤
创建画布一般可以忽略,但如果你觉得分辨率不够,可以调整
1.导入工具包
2.创建画布
3.选择图形
4.设置细节
5.保存与展示
保存一定要在展示前,如果先show的话,画布上都释放掉了,保存下来的就是空的。
画图函数:
图像细节设置
3D绘制流程
Seaborn简单介绍
加载后得到的是Seaborn格式数据
seaborn图形细节设置
seaborn相较于matplotlib更简洁
12.15
2.4 Requests
参数大多是字典形式
multiply是对应数相乘,*和dot都是矩阵乘
12.19 Python在手,数据如何轻松带走
爬虫的伦理
分类
HTTP库获得网页源码(html、css等),数据定位工具获得数据
requests很受欢迎的模块,可以实现HTTP访问,响应等,较urilib方便
xpath语法简单,效率较高(较正则表达式低)
其他数据格式:json
网站防止爬虫的手段——反爬
爬虫完整程序
介绍了scrapy框架