花了2万多买的Python教程全套,现在分享给大家,入门到精通(Python全栈

# 转为字符
## n \换行 n= newline
## \t :站位符 t=tap
## \r: 取代 r=replace
## \b: 退格 b=before
## \ :转意字符
## r :还原转意字符 r=return
# 二进位 $ 2^8
- ASCII
- GBK
- UniCode chr(ob01100111001)
# 位运算符
&, | ,<<,>>
# 运算的优先级

# 程序的流程控制
##程序的组织结果

## 顺序结构
## 选择结构 if
### 单分支 if
### 双分支 if else
### 多分支 if elif。。。。else
### 嵌套 if “ if else” else
bool( ) & type( )
[ ]=list() , ( )=tuple( )
## 条件 简写
```
print str(a+'大于等于’+str(b) if a>b)
```
### pass 语句(占位符)
### rang 语句
rang(n)
rang( star, stop)
rang(star, stop,step)
## 循环语句 while , for in
### while : while= if +1
#### 作业 1~100的偶数
## for 循环 for in 遍历 字符串,列表

···python
for _ in range(5):
print('五次内容')
```
###
## 流程控制语句 break, continue
### break 与if 使用
### continue 与if使用 结束当前循环进入下一个循环
#### 练习
#### 嵌套循环练习 输出三行四列的矩形
```pythotn
for i in range(3):
for j in range(4):
print('*', end='\t')
print()#一定要注意print的位置\
```
#### 打印九九乘法表
```pythotn
for i in range(1,10):
for j in range(1,i+1): # 因为()是前开后合
print(j,'*',i, '=',i*j,end='\t')
print()
```
### 二重循环 流程控制语句 break,continu

# 类型
## 列表

### 列表的生成式
[i for i in range (10)]

### 列表操作
#### 查询,获取单个元素 获取多个元素 in /not in
#### 修改
- 增加 append() extend() insert() 切片
- 删除 remove() pop() clear() del 切片[ star: end :sep]
- 改 索引 [ ] 切片 [ star: end :sep]


## 字典 ( 键:值 ) 对的集合 hash(key ) key只能是不可变序列:字符串
### 字典的创建 1 直接写 2 用 key=变量

### 获取字典的元素 1 print(字典[key ]) 2 字典.get('key')
### 字典的常用操作 1 查看 2遍历

### 字典的特点 key不能重复,无序 key是字符串
### 字典的生成式 函数 zip ()打包 list1为键 list2为值

可迭代对象:可以被遍历的对象
### 总结

## 元组 :是一个不可变序列 不能 增 删 改 操作

### 元组创建方式
#### 空列表 空字典 空元组 的创建 list()dict() tuple()为内置函数也能创建空~~

### 元组的操作

#### 元组元素的获取 1 索引 2 遍历

## 集合 set{ } 没有值的字典 也是hash() 函数
### 创建方式

### 相关操作
#### 集合元素的判断操作·in或not in·集合元素的新增操作
#### 调用add()方法,一次添中一个元素
·调用update()方法至少添中一个元素
#### 集合元素的删除操作
·调用remove)方法,一次删除一个指定元素,如果指定的元素不存在抛出KeyError
·调用discard()方法,一次删除一个指定元素,如果指定的元素不存在不抛界
·调用pop()方法,一次只删除一个任意元素
·调用clear()方法,清空集合
### 集合直之间的关系
#### 两个集合是否相等
·可以使用运算符==或!=进行判断
####一个集合是否是另一个集合的子集 或超集
·可以调用方法issubset进行判断 B是A的子集
·可以调用方法issuperset进行判断A是B的超集
#### 两个集合是否没有交集
·可以调用方法isdisjoint进行判断
### 集合的数学操作
交集 s1. intersecton(s2) &
并集 s1. union(s2) +
差集 s1. difference(s2) -
对称差集 并集 s1.symmertric_difference(s2)
## 字符串 不可变
### 字符串的对齐

### 字符串的比较 ord()得到ud值,chr()用值得到 字

### 字符串的创建
- fromat 方法 ’{}{}'format(a,b)
- 占位符
- f‘
- %s , %d 。%( s,d)
- {0} {0} format( a,b )
- f ` {a} {b}

#### % 可以表宽带,精度

###字符串的编码 .encode(encoding='gbk') 解码 .decode(encoding='gbk')

### 总结

# 函数 input print() type()。。。
## 创建 def fun() return
def 函数名(收入参数):
函数体
return(xx)

## 参数调用
- 按位置传递
- 按名称调用传递
###练习 可变对象
- 实际参数与形式参数可以不一致:根据位置传参
- 调用过程中,不可变对象如:字符串,不会受函数影响,可变对象 如 列表 会受函数影响
## 函数的返回值 return 函数是否要用return根据情况而定
- 0的布尔值为false ,其它数的布尔值是true
- 返回值如果是一个返回原对象的类型,如果是两个返回的是元组
## 函数参数定义 定义值 称为默认值

### 可变的位置参数
- def fun (* a) ,字形参 def fun(**a) 只能有一个
- 但可以 def fun (*a,**a)
### 参数总结
## 变量的作用域 局部作用 全局作用 global 局部=全局作用
## 递归函数 包含自己的函数

- 递归调用与递归中止条件 if else
### 练习 裴波数列 n= (n-2)+(n-1)
## 函数总结

# 程序bug
## 由来 分类 debug
### SyntaxError 语法错误
- input() 的所有内容为字符串
- 变量没赋值
- 一个等号叫赋值 两个等号才叫比较

### index Error 索引越界错误 not defined ?.方法没有被定义
### 思路不清
在各部位打印 将没用的代码注释掉
print(item)
print('--------------')
分开看的比较清楚
### 由于意外 try except else
try except else finally
## 常见异常类型异常类型
ZeroDivisionError :除( 或取模) 零( 所有数据类型)
lndexError:序列中没有此索引(index)
KeyError:映射中没有这个键
NameError:未声明/ 初始化对象( 没有属性)
SyntaxError:Python 语法错误
ValueError:传入无效的参数描述






# 编程思想
面向过程 面向对象 相辅相成
## 编程界的两大阵营
面向过程:事物比较简单, 可以用线性的思维去解决
面向对象:事物比较复杂, 使用简单的线性思维无法解决
共同点 面向过程和面向对象都是解决实际问题的一种思维方式
二者相辅相成, 并不是对立的
解决复杂问题, 通过面向对象方式便于我们从宏观上把握事物之间复杂的关系、方便我们分析
整个系统; 具体到微观操作, 仍然使用面向过程方式来处理
# 类与对象
## 类的 "定创建"
类名 单词首字母大写
对象三要素 id class value 类也是对象
1. 实例方法 def 方法(self)
2. 静态方法 @staticmethod def 方法()
3. 类方法 @classmethod def 方法(cls)
- 107.定义Python中的类 P108 - 01:34
## 类的 "用创建" (实例化)变量=类名()
- 类 内 方法(功能) 的 调用
1. 对象. 方法名()
2. 类名.方法名(对象)
- 一个类可以创建多个对象
1. 类属性: 类中方法外的变量称为类属性, 被该类的所有对象所共享
2. 类方法: 使用@classmethod 修饰的方法, 使用类名直接访问的方法
3. 静态方法. 使用@staticmethod 修饰的主法, 使用类名直接访问的方法
## 动态绑定属性和方法
- 动态绑定属性
实例名.属性=对象 直接绑定 不会改变用此类的别的类 就叫动态绑定
- 动态绑定 “方法”
实例名. name=函数 直接绑定 不会改变用此类的别的类 这也是动态绑定
|封装| 继承|方法重写|object 类| 多态|特殊方法和特殊属性|
| --- | --- | --- | --- | --- | --- |
|提高安全性|
## 面向对象的三大特征
## 封装. 提高程序的安全性
1. 将数据( 属性) 和行为( 方法) 包装到类对象中。在方法内部对属性进行操作, 在类对象的外部调用方法。这样, 无需关心方法内部的具体实现细节, 从而隔离了复杂度。
2. 在Python 中没有专门的修饰符用于属性的私有, 如果该属性不希望在类对象外部被
访问, 前边使用两个"-"
## 继承. 提高代码的复用性
语法格式: class 孑类类名( 父类1 , 父类2 一)
1. 如果一个类没有继承任何类, 则默认继承object Python 支持多继承
2. 定义子类时, 必须在其构造函数中调用父类的构造函数
super().方法()
### 方法重写
也可以def 方法
super().方法
self().方法
这样 子类的方法就加在了父类的后面
### object 类
dir()内值函数可查 属性 方法
__str__方法:用于返回对象的描述(内存地址
## 多态
简单地说, 多态就是“ 具有多种形态" 它指的是: 即便不知道一个变量所引用的
对象到底是什么类型, 仍然可以通过这个变量调用方法, 在运行过程中根据变
量所引用对象的类型, 动态决定调用哪个对象中的方法。
特殊属性 和方法
__dict__获得类对象或实例对象所绑定的所有属性和方法的字典
__len__通过重写len方法, 让内置函数len() 的参数可以是自定义类型
__add__通过重写add 方法, 可使用自定义对象具有“ + ” 功能

__init__用于创建对象init 对创建的对象进行初始化
__new__创建对象
class 对象 的 type
base:对象父类的的个数 与名称
mro: 类的层次列表 有几个子类
## 类的浅拷贝与深拷贝
* 变量的赋值操作
只是形成两个变量, 实际上还是指向同一个对象
* 浅拷贝
Python 拷贝一般都是浅拷贝, 拷贝时, 对象包含的子对象内容不拷贝,
因此, 源对象与拷贝对象会引用同一个子对象
* 深拷贝
使用copy 模块的deepcopy 函数, 递归拷贝对象中包含的子对象
源对象和拷贝对象所有的子对象也不相同
# 模块
一个.py文件就是一个模块
## 使用模块的好处
· 方便其它程序和脚本的导入并使用
· 避免函数名和变量名冲突
· 提高代码的可维护性
. 提高代码的可重用性
## 导入模块
import 模块名称[a s 别名]
from 模块名称 import 函数/ 变量/ 类
(print(dir(模块))查看模块的 方法 (函数)

方法:目录下右键 选 将目录记为 选 根目录
以主程序形式运行
## 以主程序形式运行
· 在每个模块的定义中都包括一个记录模块名称的变量一name 一程序可以检查该变量, 以确定他们在哪个模块中执行。如果一个模块不是被导入到其它程序中执行, 那么它可能在解释器的顶级模块中执行。顶级模
块的name 变量的值为main
main 语句:
if __name__ ='__main__':
程序()
# Python中的包
- 包是一个分层次的目录结构, 它将一组功能相近的模块组织在一个目录下
- 作用:
. 代码规范
· 避免模块名称冲突
- 包与目录的区别
· 包含—inlt— py 文件的目录称为包
.目录里通常不包含一init 一py 文件
- 包的导入
import 包名. 模块名
## 包的创建
## 包的导入
from 包 import 模块.类 函数 as 名
也可以 import 包
import 模块
# Python 中常用的内置模块
* sys: 与python解释器及其环境操作相关的标准库
* time: 提供与时间相关的各种函数的标准库
* os: 提供了访问操作系统服务功能的标准库
* calendar: 提供与日期相关的各种函数的标准库
* urllib: 用于读取来自网上( 服务器) 的数据标准库
* json: 用于使用JSON 序列化和反序列化对象
* re: 用于在字符串中执行正则表达式匹配和替换
* math: 提供标准算术运算函数的标准库
* decimal: 用于进行精确控制运算精度、有效数位和四舍五入操作的十进制运算
* logging: 提供了灵活的记录事件、错误、警告和调试信息等目志信息的功能
## 第三方模块的安装
pip install 模块 (在线安装方式)
### 练习 安装使用 schedule 模块

## 常见的字符编码格式
. Python 的解释器使用的是UniCode ( 内存)
. py 文件在磁盘上使用UTF-8 存储( 外存)
ASCII: 7 位表示1 个字符, 最高位为0 , 只能表示128 个字符
ISO8859: 8 位表示1 个字符, 能表示256 个字符, 兼容ASCII
GB2312 GBK GB18030:中文编码 兼容 ISO8859
UTF-8: UTF-8是Unicode 的实现变长编码, 1~4 个字节表示1 个字符, 英文1 个字节, 汉字3 个字节。
命令 encoding xxx 可以修改文件格式
# 文件读写原理 (IO 操作)

``` file= open('a.txt','r')``
## 常用的文件打开模式
文件的类型: 按文件中数据的组织形式, 文件分为以下两大类
* 文本文件: 存储的是普通“ 字符" 文本, 默认为unicode 字符集, 可以使用记本事程序打开
* 二进制文件: 把数据内容用“ 字节" 进行存储, 无法用记事本打开, 必须使用专用的软
件打开, 举例mp3 音频文件,jpg 图片doc 文档等
### 打开模式
r: 以只读模式打开文件, 文件的指针将会放在文件的开头
w: 以只写模式打开文件, 如果文件不存在则创建, 如果文件存在, 则覆盖原有内容, 文件指针在文件的
开头
a: 以追加模式打开文件, 如果文件不存在则创建, 文件指针在文件开头, 如果文件存在, 则在文件末尾
追加内容, 文件指针在原文件末尾
b: 以二进制方式打开文件, 不能单独使用, 需要与共它模式一起使用, rb , 或者wb
+: 以读写方式打开文件, 不能单独使用, 需要与其它模式一起使用, a+
### 文件对象的常用方法
read readline readlines writ .writelines()seek tell frush close
read(size): 从文件中读取size个字节或字符的内容返回。若省略[ size ] ,则读取到文件末尾, 即一次读取文件所有内容
readline ()从文本文件中读取一行内容
readlines(): 把文本文件中每一行都作为独立的字符串对象, 并将这些对象放入列表返回
write (str): 将字符串str 内容与入文件
writelines (s_list): 将字符串列表s 一list 与入文木文件, 不添加换行符
seek (offset [ , whence): 把文件指针移动到新的位置, offset 表示相对于whence 的位置:ffset 为正往结束方向移动, 为负往开始方向移动
whence 不同的值代表不同含义:
0 : 从文件头开始计算( 默认值)
1 : 从当前位置开始计算
2 : 从文件尾开始计算
tell():返回文件指针的当前位置
flush():把缓冲区的内容写入文件, 但不关闭文件
close (): 把缓冲区的内容写入文件, 同时关闭文件, 释放文件对象相关资源
### with句 (上下文管理器)
1. 可以自动管理上下文资源, 不论什么原因跳出with 块,都能确保文件正确的关闭, 以此来达到释放资源的目的。
- 原理:
## 目录 操作
· os 模块是Py on 内置的与操作系统功能和文件系统相关的模块,
该模块中的讠口句的执行结果通常与操作系统有关, 在不同的操
作系统上运行, 得到的结果可能不一样。
.os 模块与os.path
### os 模块用于对目录或文件进行操作
os.system(应用)os.gecwd() listdir(path) mkdir(path,[mode]) rmdir(path) removedirs(path1/path2) chdir(path)
#### OS
* system():打开应用
* getcwd (): 返回当前的工作目录
* mkdir (path , [mode]): 创建目录
* makedirs (path1/path2. . . [ , mode)): 创建多级目录
* rmdir (path): 删除目录
* removedirs (path 1 /path2.....):
* 删除多级目录 chdir (path): 将path 设置为当前主作目
#### os.path操作目录 相关函数
os.path.函数()
* abspath (path): 用于获取文件或目录的绝对路径
* exists (path): 用于判断文件或目录是否存在, 如果存在返回True ,否则返回Fa1se
* join (path , name): 将目录与目录或者文件名拼接起来
* splitext(): 分离文件名和扩展名
* basename (path): 从一个目录中提取文件名
* dirname (path): 从一个路径中提取文件路径, 不包括文件名
* isdir (path): 用于判断是否为路径
#### 练习

# 学生管理系统
