P13列表
1.列表的一些常用操作符
比较操作符
逻辑操作符
连接操作符
重复操作符
成员关系操作符
2.列表的小伙伴们(常使用的内置函数)
count()
index()
reverse()
sort():用指定的方法对列表进行排序,默认从小到大;
3.列表的拷贝
List7 = list6[ : ]
List8 = list6
P14元组
和列表是近亲关系,在实际使用中是非常相似的。元组中的元素不能改变。
-
创建和访问一个元组
例子: -
元组的拷贝
例: -
元组的关键是逗号,不是小括号;
-
创建空元组
-
更新和删除一个元组
更新一个元组:
删除一个元组:
6. 元组相关的操作符
P15字符串
-
字符串的切片
-
字符串同元组的性质一样,组内元素不能修改;
P16格式化
- format()的使用:
- 格式化操作符(%)
格式化符号 说明
%c 转换成字符(ASCII 码值,或者长度为一的字符串)
%r 优先用repr()函数进行字符串转换
%s 优先用str()函数进行字符串转换
%d 格式化整数/转成有符号十进制数
%i
%u 转成无符号十进制数
%o 转成无符号八进制数
%x 转成无符号十六进制数
%X 格式化无符号十六进制数(大写)
%e 用科学计数法格式化定点数
%E 作用同e%,用科学计数法格式化定点数
%f 转成浮点数(小数部分自然截断)
%F
%g 根据值的大小决定使用f%或e%
%G 作用同g%,根据值的大小决定使用f%或e%
%% 输出% (格式化字符串里面包括百分号,那么必须使用%%) - 格式化操作符辅助符
辅助符号 说明
- 定义宽度或者小数点精度
- 用做左对齐
- 在正数前面显示加号(+)
在八进制数前面显示零(0),在十六进制前面显示"0x"或者"0X"(取决于用的是"x"还是"X")
0 显示的数字前面填充"0"而不是默认的空格
(var) 映射变量(通常用来处理字段类型的参数)
m.n m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)
4. 字符串转义字符含义
符号 说明
\’ 单引号
\” 双引号
\a 发出系统响铃声
\b 退格符
\n 换行符
\t 横向制表符(TAB)
\v 纵向制表符
\r 回车符
\f 换页符
\o 八进制数代表的字符
\x 十六进制数代表的字符
\0 表示一个空字符
\ 反斜杠
P17序列(列表、元组和字符串的统称)
- 列表、元组和字符串的共同点
1.1 都可以通过索引得到每一个元素
1.2 默认索引值总是从0开始
1.3 可以通过分片的方法得到一个范围内的元素的集合
1.4 有很多共同的操作符(重复操作符,拼接操作符,成员关系操作符) - 迭代:是重复反馈过程的活动,其目的是为了达到或接近所需的目标或结果(每一次对过程的重复称为一次迭代,每一次迭代的结果成为下一次迭代的初始值)
- list:把一个可迭代对象转换为列表
使用: - tuple:把一个可迭代对象转换为元组
- str(obj):把obj对象转换为字符串;
- len(sub):返回sub的长度;
- max():返回序列或者参数集合中的最大值;
- min():返回序列或则参数集合中的最小值;
- sum(iterable[,start=0])返回序列iterable和可选参数start的总和;
- sorted():排序,从小到大排序;
- reversed():返回一个迭代器的对象;
- enumerate():
- zip:
P18:函数(Python的乐高积木) - 定义函数:
格式:def 函数名():
括号内是参数,含参数的函数定义:
-
调用函数:
格式:函数名() -
函数的返回
return
P19函数:参数
-
形参和实参
-
函数文档
-
关键字参数
-
默认参数
-
收集参数
P20函数与过程
1.
- 返回值
- 变量值的作用范围
局部变量
全局变量
P21内嵌函数和闭包
-
global关键字
-
内嵌函数
-
闭包
-
Nonlocal
P22函数:lambda表达式 -
lambda表达式的作用
(1)Python写一些执行脚本时,使用lambda就可以省下定义函数过程,从而使得代码更加精简;
(2)对于一些比较抽象并且整个程序执行下来只需要调用一两次的函数,可以使用lambda从而不需要考虑的命名问题;
(3)简化代码的可读性
3.filter
P23函数:递归
1.
P24函数:递归
- 斐波那契数列的迭代实现:
迭代:
递归:
P25函数:递归——汉诺塔
1.
- 汉诺塔的代码
P26字典:当索引不好用时
-
映射:两个元素集合之间,各元素之间的对应关系
-
创建和访问字典
字典的标志性符号:大括号; -
改变字典键对应的值:
P27
-
fromkeys():
例子: -
访问字典的方法
1.1 keys()
1.2 values()
1.3 items()
1.4 get() -
成员资格操作符in和 not in
-
清空字典clear方法
-
copy方法:浅拷贝方法
-
pop
-
popitem
-
setdefault
-
update:
P28集合 -
创建一个集合
1.1直接用一堆元素用花括号括起来
1.2使用set()工厂函数 -
访问集合中的值
2.1使用for将集合中的值一个一个读取出来
2.2使用in或者not in来判断一个元素是否在集合中;
3.不可变集合 frozen
forzense
P29文件 -
打开文件
-
文件对象方法
P30任务
优化后:
P31文件系统
1.
-
模块是一个包含所有你定义的函数和变量的文件,其后缀名是时.py,模块可以被别的程序引入,以使用该模块中的函数等功能。
-
OS模块
-
os.path模块中关于路径常用的函数使用方法
使用方法:os.path.函数名
P32
- pickle模块
存放:pickling 读取 unpickling
P33
- 异常处理
- Python异常总结
AssertionError 断言语句(assert)失败
AttributeError 尝试访问未知的对象属性
EOFError 用户输入文件末尾标志EOF(Ctrl+d)
FloatingPointError 浮点计算错误
GeneratorExit generator.close()方法被调用的时候
ImportError 导入模块失败的时候
IndexError 索引超出序列的范围
KeyError 字典中查找一个不存在的关键字
KeyboardInterrupt 用户输入中断键(Ctrl+c)
MemoryError 内存溢出(可通过删除对象释放内存)
NameError 尝试访问一个不存在的变量
NotImplementedError 尚未实现的方法
OSError 操作系统产生的异常(例如打开一个不存在的文件)
OverflowError 数值运算超出最大限制
ReferenceError 弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象
RuntimeError 一般的运行时错误
StopIteration 迭代器没有更多的值
SyntaxError Python的语法错误
IndentationError 缩进错误
TabError Tab和空格混合使用
SystemError Python编译器系统错误
SystemExit Python编译器进程被关闭
TypeError 不同类型间的无效操作
UnboundLocalError 访问一个未初始化的本地变量(NameError的子类)
UnicodeError Unicode相关的错误(ValueError的子类)
UnicodeEncodeError Unicode编码时的错误(UnicodeError的子类)
UnicodeDecodeError Unicode解码时的错误(UnicodeError的子类)
UnicodeTranslateError Unicode转换时的错误(UnicodeError的子类)
ValueError 传入无效的参数
ZeroDivisionError 除数为零 - 以下是 Python 内置异常类的层次结构:
BaseException
±- SystemExit
±- KeyboardInterrupt
±- GeneratorExit
±- Exception
±- StopIteration
±- ArithmeticError
| ±- FloatingPointError
| ±- OverflowError
| ±- ZeroDivisionError
±- AssertionError
±- AttributeError
±- BufferError
±- EOFError
±- ImportError
±- LookupError
| ±- IndexError
| ±- KeyError
±- MemoryError
±- NameError
| ±- UnboundLocalError
±- OSError
| ±- BlockingIOError
| ±- ChildProcessError
| ±- ConnectionError
| | ±- BrokenPipeError
| | ±- ConnectionAbortedError
| | ±- ConnectionRefusedError
| | ±- ConnectionResetError
| ±- FileExistsError
| ±- FileNotFoundError
| ±- InterruptedError
| ±- IsADirectoryError
| ±- NotADirectoryError
| ±- PermissionError
| ±- ProcessLookupError
| ±- TimeoutError
±- ReferenceError
±- RuntimeError
| ±- NotImplementedError
±- SyntaxError
| ±- IndentationError
| ±- TabError
±- SystemError
±- TypeError
±- ValueError
| ±- UnicodeError
| ±- UnicodeDecodeError
| ±- UnicodeEncodeError
| ±- UnicodeTranslateError
±- Warning
±- DeprecationWarning
±- PendingDeprecationWarning
±- RuntimeWarning
±- SyntaxWarning
±- UserWarning
±- FutureWarning
±- ImportWarning
±- UnicodeWarning
±- BytesWarning
±- ResourceWarning
P34异常处理
-
Try-except语句
语法: try:
检测范围
except Exception[as reason]:
出现异常后的处理代码 -
Try-finally语句
语法: try:
检测范围
except Exception[as reason]:
出现异常(Exception)后的处理代码
finally
无论如何都会被执行的代码 -
raise语句
P35
- 丰富的else语句
1.1与if搭配:表示要么怎样,要么不怎样;
1.2与for或者while搭配:表示干完了怎养,干不完别想怎样
1.3与异常处理搭配:没有问题,那就干吧 - 简介的with语句
P36图形用户界面 EasyGui
P37对象
- 对象=属性(静态的)+方法(动态的)
- OO(面向对象 O Object)的特装: 封装,继承,多态
- 类的定义
class + 类名:
P38
-
self:相当于C++的this指针
例子: -
python的魔法方法
init(self):
例子: -
公有和私有
默认对象的属性时共有的
Python采用name mangling(名字重整)来实现私有化:在python中定义私有变量只需要在变量名或函数名前加上”_”两个下划线,那么这个函数或变量就会变为私有;
P39类和对象:继承
- 继承(子类继承父类的属性和方法)
语法: class 子类名 ( 父类名 )
注:如果子类中定义与父类同名的方法或属性,则会自动覆盖父类对应的方法或属性. - 多重继承
语法: class 子类名 (父类名1,父类名2,父类名3…):
P40类和对象:拾遗
- 类、类对象和实例对象
2.绑定:python严格要求方法需要有实例才能被调用,这种限制其实就是python所谓的绑定
P41和类与对象相关的BIF
- issubclass(class,classinfo)
注意:1)一个类被认为是其自身的子类
2)classinfo可以是类对象组成的元组,只要calss与其中任何一个候选类的子类,则返回true; - isinstance(object,classinfo)
注意:1)如果第一个参数不是对象,则永远返回false;
2)如果第二个参数不是类或者由类对象组成,会抛出一个typeError的异常 - hasattr(object,name)
4.getattr(object,name[,deaufalt])
5.setattr(object,name,value)
6.delattr(object,name)
7.property(fget=none,fset=None,fdel=None,doc=None)通过属性来设置属性
P42魔法方法
- 构造和析构
1.1魔法方法总是被双下划线包围,例如__init__
1.2魔法方法是面向对象python的一切,如果你不知道魔法方法,说明你还没能意识到面向对象的python的强大
1.3魔法方法的“魔力”体现在他们总能够在适当的时候被自动调用
2.init(self[, …])
3.new(cls[, …])
4.del(self)
P43魔法方法;算数运算1
- 所谓的工厂函数就是类对象
- 、
P44魔法方法:算数运算2
魔法方法 含义
基本的魔法方法
new(cls[, …]) 1. new 是在一个对象实例化的时候所调用的第一个方法
2. 它的第一个参数是这个类,其他的参数是用来直接传递给 init 方法
3. new 决定是否要使用该 init 方法,因为 new 可以调用其他类的构造方法或者直接返回别的实例对象来作为本类的实例,如果 new 没有返回实例对象,则 init 不会被调用
4. new 主要是用于继承一个不可变的类型比如一个 tuple 或者 string
init(self[, …]) 构造器,当一个实例被创建的时候调用的初始化方法
del(self) 析构器,当一个实例被销毁的时候调用的方法
call(self[, args…]) 允许一个类的实例像函数一样被调用:x(a, b) 调用 x.call(a, b)
len(self) 定义当被 len() 调用时的行为
repr(self) 定义当被 repr() 调用时的行为
str(self) 定义当被 str() 调用时的行为
bytes(self) 定义当被 bytes() 调用时的行为
hash(self) 定义当被 hash() 调用时的行为
bool(self) 定义当被 bool() 调用时的行为,应该返回 True 或 False
format(self, format_spec) 定义当被 format() 调用时的行为
有关属性
getattr(self, name) 定义当用户试图获取一个不存在的属性时的行为
getattribute(self, name) 定义当该类的属性被访问时的行为
setattr(self, name, value) 定义当一个属性被设置时的行为
delattr(self, name) 定义当一个属性被删除时的行为
dir(self) 定义当 dir() 被调用时的行为
get(self, instance, owner) 定义当描述符的值被取得时的行为
set(self, instance, value) 定义当描述符的值被改变时的行为
delete(self, instance) 定义当描述符的值被删除时的行为
比较操作符
lt(self, other) 定义小于号的行为:x < y 调用 x.lt(y)
le(self, other) 定义小于等于号的行为:x <= y 调用 x.le(y)
eq(self, other) 定义等于号的行为:x == y 调用 x.eq(y)
ne(self, other) 定义不等号的行为:x != y 调用 x.ne(y)
gt(self, other) 定义大于号的行为:x > y 调用 x.gt(y)
ge(self, other) 定义大于等于号的行为:x >= y 调用 x.ge(y)
算数运算符
add(self, other) 定义加法的行为:+
sub(self, other) 定义减法的行为:-
mul(self, other) 定义乘法的行为:*
truediv(self, other) 定义真除法的行为:/
floordiv(self, other) 定义整数除法的行为://
mod(self, other) 定义取模算法的行为:%
divmod(self, other) 定义当被 divmod() 调用时的行为
pow(self, other[, modulo]) 定义当被 power() 调用或 ** 运算时的行为
lshift(self, other) 定义按位左移位的行为:<<
rshift(self, other) 定义按位右移位的行为:>>
and(self, other) 定义按位与操作的行为:&
xor(self, other) 定义按位异或操作的行为:^
or(self, other) 定义按位或操作的行为:|
反运算
radd(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)
rsub(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)
rmul(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)
rtruediv(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)
rfloordiv(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)
rmod(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)
rdivmod(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)
rpow(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)
rlshift(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)
rrshift(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)
rand(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)
rxor(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)
ror(self, other) (与上方相同,当左操作数不支持相应的操作时被调用)
增量赋值运算
iadd(self, other) 定义赋值加法的行为:+=
isub(self, other) 定义赋值减法的行为:-=
imul(self, other) 定义赋值乘法的行为:*=
itruediv(self, other) 定义赋值真除法的行为:/=
ifloordiv(self, other) 定义赋值整数除法的行为://=
imod(self, other) 定义赋值取模算法的行为:%=
ipow(self, other[, modulo]) 定义赋值幂运算的行为:**=
ilshift(self, other) 定义赋值按位左移位的行为:<<=
irshift(self, other) 定义赋值按位右移位的行为:>>=
iand(self, other) 定义赋值按位与操作的行为:&=
ixor(self, other) 定义赋值按位异或操作的行为:^=
ior(self, other) 定义赋值按位或操作的行为:|=
一元操作符
pos(self) 定义正号的行为:+x
neg(self) 定义负号的行为:-x
abs(self) 定义当被 abs() 调用时的行为
invert(self) 定义按位求反的行为:~x
类型转换
complex(self) 定义当被 complex() 调用时的行为(需要返回恰当的值)
int(self) 定义当被 int() 调用时的行为(需要返回恰当的值)
float(self) 定义当被 float() 调用时的行为(需要返回恰当的值)
round(self[, n]) 定义当被 round() 调用时的行为(需要返回恰当的值)
index(self) 1. 当对象是被应用在切片表达式中时,实现整形强制转换
2. 如果你定义了一个可能在切片时用到的定制的数值型,你应该定义 index
3. 如果 index 被定义,则 int 也需要被定义,且返回相同的值
上下文管理(with 语句)
enter(self) 1. 定义当使用 with 语句时的初始化行为
2. enter 的返回值被 with 语句的目标或者 as 后的名字绑定
exit(self, exc_type, exc_value, traceback) 1. 定义当一个代码块被执行或者终止后上下文管理器应该做什么
2. 一般被用来处理异常,清除工作或者做一些代码块执行完毕之后的日常工作
容器类型
len(self) 定义当被 len() 调用时的行为(返回容器中元素的个数)
getitem(self, key) 定义获取容器中指定元素的行为,相当于 self[key]
setitem(self, key, value) 定义设置容器中指定元素的行为,相当于 self[key] = value
delitem(self, key) 定义删除容器中指定元素的行为,相当于 del self[key]
iter(self) 定义当迭代容器中的元素的行为
reversed(self) 定义当被 reversed() 调用时的行为
contains(self, item) 定义当使用成员测试运算符(in 或 not in)时的行为
P45魔法方法:简单定制
P46魔法方法:属性访问
1.getattr(self,name):定义当用户试图获取一个不存在的属性时的行为;
2. getattribute(self,name):定义当该类的属性被访问时的行为
3.setattr(self,name,value):定义当一个属性被设置时的行为
4.delattr(self,name):定义当一个属性被删除时的行为
P47魔法方法:描述符
- 描述符:将某种特殊类型的类的实例指派给另一个类的属性
P48
P49
P50
P51模块(模块就是程序)
- 容器(数据的封装),函数(语句的封装),类(方法和属性的封装)
- 命名空间:
- 导入模块:1)import 模块名;
2)from 模块名 import 函数名
3)import 模块名 as 新名字
P52模块: - 模块的作用:封装python的代码,实现代码的重用
- If__name__ == ‘main’
- 搜索路径
- 包(package)
1) 创建一个文件夹,用于存放相关的模块,文件夹的名字既是包的名字;
2) 在文件夹中创建一个__init__.py的模块文件,内容可以为空;
3) 将相关的模块放入文件中; - 导入包:包名.模块名
P53模块:像个极客一样思考
1.python标准库: