概论
解释器中运行python代码
- 单行运行python
 在cmd输入python,在解释程序内直接输入代码回车执行。
- 直接运行python文件Python d:\test.py
注释
| 1 | 1. 单行注释 | 
变量
- 定义变量,不用声明
- python中变量无类型,而数据有类型。
- 示例代码1 
 2money = 50 
 print("账户余额 : " , money , "元")
数据类型
python需要处理的数据分为两种,数值型数据和字符。
所有的数据在计算机内部都是以二进制来存储的。  
- 数值型数据直接转换成二进制形式
- 字符型需要进行编码(将每个字符对应一个数值型数据)
- 数据类型  
- 特殊数据类型None(空的,无意义的) - 函数不写返回值时,返回None
- 作为初始值定义变量
- None 在if判断中表示False
 
- 查看数据类型 - print(type("hello"))
- 类型转换 - 1 
 2
 3
 4
 5- int(a) # 转换整数,只有都是数字的字符串才可以转换成数字 
 float(a) # 转换浮点数
 str(a) # 转换字符串,任何类型都可以转字符串
标识符
- 标识符大概就是变量,方法,类的名字。
- 命名规则- 标识符中只允许出现英文,中文,数字,下划线_
- 数字不允许开头
 
- 大小写敏感
- 不可以使用关键字
- 命名规范- 变量命名全小写,不同单词用下划线分割。
 
运算符
- 算术运算符  
- 赋值运算符 = 
- 复合赋值运算符 
 将变量本身进行运算,然后再将结果赋值给变量本身。 
- 比较运算符  
字符串输出
字符串的拼接
| 1 | # 拼接字符串和变量(只能是字符串变量) | 
利用占位符输出
字符串的格式化(解决字符串无法和其它类型完成拼接)
| 1 | # 将变量变成字符串,放入占位地方 | 
%s 变量转换成字符串,占位
%d 变量转换成整数,占位
%f 变量转换成浮点,占位  
字符串宽度和精度控制%m.nd
- m宽度控制,多余用空格补足,小数和小数点也算在宽度内,当宽度小于数字本身则宽度控制无效。
- n表示精度控制,有几位小数,余下的四舍五入。1 
 2
 3num = 3.28 
 print("%5") #_3.28
 print("%3") #宽度控制无效
快速格式化
不限数据类型,不做精度控制
| 1 | num = 24 | 
对表达式进行格式化
表达式就是一条具有明确执行结果的代码语句。
| 1 | print(f"我今年{22+2}岁了") | 
数据输入
读取键盘输入input函数,回车结束。
只能输入字符串
| 1 | name = input() | 
语句
if语句
| 1 | age = 30 | 
代码演示
| 1 | # 判断年龄 | 
循环语句
- while 循环 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15- # 普通循环 
 age = int(input("语句1"))
 while age > 30 # 布尔型判断条件
 print("语句2") # 缩进判断归属
 age += 1 # 明确终止条件
 # 嵌套循环
 i = 1
 while i <= 100 :
 print("语句1")
 i += 1
 j = 1
 while j <= 10
 print("语句2")
 j += 1
- for循环 - 对内容进行逐个处理
- 无法定义循环条件,只能被动的取出数据
- 空格缩进判断归属
- 临时变量的作用域
 循环内的临时变量在循环外部也能使用,但是不符合规范,要先定义1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14# 基本语句 
 name = "hello"
 for x in name : # for 临时变量x in 序列类型(字符串,列表,元组)
 print(x)
 # for 循环的作用域与范围
 i = 5
 for i in range(5) :
 print(i)
 print(i) # 输出 0,1,2,3,4,4
 # 嵌套循环
 for i in range(5) : # 空格缩进判断归属
 for j in range(5) :
 
range语句(生成一个数据序列)
| 1 | range(5) {0,1,2,3,4} | 
- 循环控制- continue  - 跳过本次循环,直接进行下一次
- 只作用在所在的循环上
 
- break 直接结束循环,只作用在所在的循环上
 
- continue  
函数
- 函数是可重复使用的用来实现特定功能的代码块。
- 函数先定义,后调用
- 参数和返回值可以省略
- return 后面的语句都不执行
- 函数不写返回值时,默认返回None(在if判断时等同于false)
函数的定义与调用
| 1 | # 函数定义 | 
函数的嵌套调用
- 函数的嵌套调用是指在一个函数里面,调用另一个函数
- python允许函数的嵌套调用,在函数中执行到被调函数,会跳转到被调函数执行,执行完成后才会继续执行主函数。
变量作用域
- 局部变量- 定义在函数体内部的变量
- 只在函数体内部生效
 
- 全局变量- 在函数体外部定义的变量
- 在函数体内和函数体外都生效的变量1 
 2
 3
 4
 5
 6
 7
 8
 9a = 200 
 b = 200
 def add () :
 a = 500 # 在函数体内部定义的局部变量a和全局变量a没有关系
 global b # 声明b是全局变量
 b = 500
 print(a) # a是200
 print(b) # b是500
 
函数的多返回值

函数参数使用形式
- 位置参数  
- 关键字参数  
- 不定长参数(可变传参) 
 不确定调用时会传多少个参数- 位置传递 
- 关键字传递 
 
- 位置传递
- 缺省参数  
函数作为参数传递
- 函数本身可以作为参数传入另外一个函数使用。
- 函数作为参数传入的是计算逻辑,而非数据。 
lambda匿名函数
- 基础概念 
- 示例 
- 备注- 只能写一条语句,不用写return语句,默认return结果。
 
异常
什么是异常
程序运行中出现的错误,弹出的错误提示。也就是常说的bug。
异常的捕获方法
- 为什么
 任何程序在运行中,都可能出现bug。我们要做的不是要求程序完美运行,而是对可能出现的bug提前准备,提前处理。防止程序因为一个bug而停止运行。
- 怎么捕获1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 271. 捕获所有异常 
 try:
 可能发生错误的代码
 except Exception as e:
 如果出现异常执行的代码
 2. 捕获指定异常
 try:
 可能发生错误的代码
 except NameError as e: # 指定捕获变量未定义异常,e是报的异常信息当成变量处理
 如果出现异常执行的代码
 3. 捕获多个异常
 try:
 可能发生错误的代码
 except (NameError, ZeroDivisionError) :
 如果出现异常执行的代码
 4. 异常else和finally
 try:
 可能发生错误的代码
 except Exception as e:
 如果出现异常执行的代码
 else:
 没有出现异常执行的代码
 finally:
 无论如何都会执行的代码
异常的传递
异常具有传递性,它可以随着函数的调用关系向上传递。所以不需要去最底层真正出现异常的那句话去捕获,在更高的层级也是可以捕获的。
模块
是什么
模块就是一个python的代码文件,以.py结尾。
模块就是里面提供各种各样类,函数,变量的python文件
可以把模块看成一个工具包。  
模块导入

 
| 1 | 1. 全部导入 | 
自定义模块
- 如何自定义模块
 直接创建python文件,写功能。
 当使用 from 模块 import 方法 导入多个模块的同名方法时,后导入的方法会覆盖前导入的方法
- 内置变量的使用1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 131. 被导入的模块,内部的方法调用会在导入时自动执行。使用python文件的内置变量__name__(运行程序时会标记为__main__) 
 if __name__ == "__main__" :
 test(1,2) # 该调用在模块导入时不会被执行
 2. 当被使用 from time import * 语句导入模块所以功能时,会先检查__all__变量,如果存在则只将该变量列表中的方法导入,不存在则导入全部功能。
 __all__ = ["test1"] # from time import * 语句只能导入test1模块
 def test1():
 print("导入模块1")
 def test2():
 print("导入模块2")
包
包是什么
装有python模块和一个__init__.py 的文件夹
自定义包
| 1 | 1. 包的导入 | 
安装第三方包
- 什么是第三方包  
- pip安装第三方包 - 1 
 2
 3
 4
 5
 6
 7- 1. 传统安装(通过国外网站下载) 
 打开cmd
 pip install 包名称
 pip install numpy
 2. 清华大学镜像下载
 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
面向对象
认识对象
为了有效的组织数据,使数据的组织达到简洁统一。
类的定义和使用

构造方法

其它内置方法
- __str__字符串方法 
 控制类对象转换成字符串的行为。
 在你print对象时,输出你自定义的内容 
- lt 符号比较 
 在对象中无法直接比较成员变量,<和>需要开通 
- le 比较 
 用于小于等于符和大于等于符的比较
- eq 用于相等判断 
 不使用内置方法,比较的是内存地址
 两个对象比较时,按照内置方法里描述的进行比较。 
封装
- 私有属性和方法
 私有属性和方法只可以让对象内部方法使用 

继承


调用时,先找子类,然后按顺序找父类

类型注解
- 变量的类型注解 
 主要用于为函数,类的返回值等没办法一眼看出来的做注解。 
- 函数和方法类型注解  
- Union类型  
多态
- 同一个函数,参数定义是父类。传入不同的子类,会有不同的结果。 
- 用来定义抽象类 
- 抽象类是一种顶层设计,最为一种设计标准