一、字典
①映射
进行索引
②创造字典
1.
>>>dict={‘a’:’b’}
a-key(键),b-value(值),a:b-项
2.空字典
3.元组参数形式
4.关键字参数
小甲鱼和苍井空不能加引号
4.1索引替换
4.2如果索引的没有在字典里
③内键
1.fromkeys(…)
2.批量修改
重新创造新的字典,而不是修改。
④访问字典
1.keys()
2.values()
3.items()
4.访问不存在的键
4.1报错
4.2用get赋值
5.清空字典
clear()
比较直接赋空字典和clear()
6.copy
拷贝非赋值
对比:
拷贝地址不同;赋值相同。
7.pop 弹出给定键盘输入的值
8.popitem 弹出一个项
随机弹出一个数据
9.setdefault
与get相似,但是找不到对应键时会自动添加,排序随机
10.update
运用字典或映射关系更新字典
二、集合
①与字典相似,没有体现映射关系。
字典代码:
集合代码:
②集合特点:
1.唯一:重复数据会被剔除
2.无序:无法进行索引
③如何创建一个集合
1.直接把一堆元素用花括号括起来(如上)
2.使用set()工厂函数
eg.去除重复元素
不用集合:
集合:
注意:使用set函数得到的结果是无序的。
④访问集合的值
1.使用for把集合中的数据一个个读取出来
2.通过in和not in判断一个元素是否在集合中已经存在
⑤内置方法
1.add()
2.remove()
⑥不可变集合
frozenset()
不能改变,所以不能添加。
三、文件
①打开文件
Open(‘文件名或路径’)
②文件对象方法
1.用完文件记得关闭!!
2.举例
3.迭代读取文件对象
效率低:
效率高:
4.写入文件
Write()(备注“w”)
③任务
1.利用分隔符筛选对话
2.利用函数简化代码
四、模块
①OS模块(跨操作系统)
有了OS模块,我们不需要关心什么操作系统下使用什么模块,OS模块会帮你选择正确的模块并调用。
②pickle模块
几乎所有数据类型的数据转化为二进制的形式储存;文件比较大做成泡菜形式,便于修改。
读取:
五、异常处理
①exception
②检测异常
1.try-except语句
try:
检测范围
except Exception[as reason]
出现异常后的处理代码
一个try语句可以搭配多个expect语句指明错误类型,也可以用一个expect元组报错,还可以单独用一个expect语句(不推荐)。
2.try-finally语句
try:
检测范围
except Exception[as reason]:
出现异常后的处理代码
finally:
无论如何都会被执行的代码
确保一定执行(保存、关闭文件)
3.Raise语句
raise + 错误类型,主动产生一个错误
六、else语句和with语句
①if-else语句:要么怎样,要么不怎样
②while-else语句:干完了能怎么样,干不完就别想怎样
③except-else语句:没有问题,那就干吧
(出错)
④简洁的with语句
用 with打开文件不用考虑关闭文件
七、EasyGui
①建议不要再IDLE运行EasyGui
②尝试
八、类和对象
①对象 = 属性 + 方法(类名必须以大写字母开头)
调用
②OO面向对象的特征
封装、继承、多态
③self
④
⑤公有和私有(name mangling名字改编)
在变量前加两个下划线,理论上只有从内部访问。
伪私有:只是将变量名改为—类名—变量名。实际上没有权限控制。
⑥继承(父类、基类、超类 子类)
(子类变量名会自动覆盖父类变量名)
鱼吃鱼
Super()方法
多重继承(可以继承多个类的属性和方法,滥用会容易出现bug)
⑦拾遗
组合(水池里的鱼)
⑧Mix-in(鱼C论坛扩展阅读)
⑨类、类对象和实例对象
1.
属性名字和方法名相同,属性会覆盖方法。
为避免:可以用不同的词性来区分。
2.绑定:python严格要求方法需要有实例才能被调用,这种限制其实就是python所谓的绑定概念。
⑩相关的BIF
1.issubclass(class,classinfo)
方法用于判断参数 class 是否是类型参数 classinfo 的子类。
2.isinstance()
函数来判断一个对象是否是一个已知的类型,类似 type()。
3.type() 与 isinstance()区别:
type() 不会认为子类是一种父类类型,不考虑继承关系。
isinstance() 会认为子类是一种父类类型,考虑继承关系。
4. hasattr( object,name)
用于判断对象是否包含对应的属性。
object – 对象。
name – 字符串,属性名。
5. getattr()
用于返回一个对象属性值。
getattr(object, name[, default])
object – 对象。
name – 字符串,对象属性。
default – 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError。
6. setattr()
用于设置属性值,该属性不一定是存在的。
setattr(object, name, value)
object – 对象。
name – 字符串,对象属性。
value – 属性值
7. property(fget=None, fset=None, fdel=None, doc=None)
作用是在新式类中返回属性值
fget – 获取属性值的函数
fset – 设置属性值的函数
fdel – 删除属性值函数
doc – 属性描述信息
九、魔法方法
类是抽象的,对象是具体的。
魔法方法是面向对象的python的一切。
① init ():
是用来设置原始参数的,不能设置任何返回不能return
② new ()
继承一些不可变的class时(比如int, str, tuple),提供自定义这些类的实例化过程的途径。
1.只有继承于object的新式类才能有 new 方法,一般系统自动调用
2. new 至少要有一个参数cls,代表要实例化的类
3. del (self)
当所有指向该类的标签被销毁后执行该操作
③反运算:反运算在运算符左右类型不同,且左边没用相应运算方法时被调用
④getattr(self,name)
定义当用户试图获取一个不存在的属性时的行为
getattr(被访问的属性不存在时)自动调用
⑤getattribute(self,name)
对于python来说,属性或者函数都可以被理解成一个属性,且可以通过__getattribute__获取
getattribute(属性在被访问时)自动调用
⑥setattr(self,name,value)
⑦delattr(self,name)
⑧描述符:将某种特殊类型的类的实例指派给另一个类的属性
1.get(self,instance,owner)
用于访问属性,返回属性的值
2.set(self,instance,value)
在属性分配操作中调用,不返回任何内容
3.delete(self,instance)
控制删除操作
⑩协议protocols
协议类似某些语言的接口,里面包含的是一些必须要实现的方法
⑪定制容器
1.如果希望容器不可变(eg.只需定义)
len(self) 返回容器中元素个数
getitem(self,key) 获取容器中指定元素
2.如果希望容器可变
除了 len()和 getitem ()还需定义:
setitem(self,key,value) 设置容器中指定元素
delitem(self,key) 删除容器中元素
⑫迭代器
1 iter() 将一个可以迭代的对象转为迭代器对象
2 next() 返回迭代器的一个元素,可设置参数变量
魔法方法
1.iter()
2. next()
十、生成器
生成器是迭代器的一种实现
协同程序就是可以运行的独立函数调用,函数可以暂停或者挂起,缤纷在需要的时候从程序离开的地方继续或者重新开始。
一个函数里面一旦被定义yield语句,这个函数就是生成器。
十一、模块
复习:
元组、字符串字典等:容器—>数据的封装
函数—>语句的封装
类—>方法和属性的封装也就是数据和语句的封装
①模块是更高级的封装,就是程序。保存的一个.py文件,就是一个独立的模块。模块要保存在和导入模块的源文件一个位置。
②导入模块
1.import 模块名
2.form 模块名 import 函数名
还可以使用*分配符
3.import 模块名 as 新名字(最推荐)
③if name == ‘ main ’
(加了这个之后test()是作为这个文件里的执行,不被其他程序调用)
④搜索路径
1.模块导入需要搜索的路径。实际上就是一个列表。
site-packages是存放模块最好的路径。
2.添加路径
⑤包(package)