一、生成器
1.什么是生成器
1)容器(是一种可以创建多个数据的容器),生成器中保存的是创建数据的方法,而不是数据本身
2)特点:
a.打印生成器无法查看元素;
b.不能通过len()统计元素的个数;
c.如果需要生成器中的数据,必须将数据取出,而且取一个就少一个
3)生成器获取元素的方式和迭代器获取元素的方式一模一样,若取完了再取,会报错,转成列表会得到空列表。next(生成器)
2.怎么创建生成器
调用带有yeild关键字的函数,就可以得到一个生成器
3.怎么控制生成器中元素的个数和元素的值
执行创建生成器的函数的函数体的时候,会遇到几次yield,对应的生成器就可以创建几个元素,每次遇到yield,yield后面的值就是能创建出来的数据
#二、模块
1.什么是模块
python中一个py文件就是一个模块
2.怎么在一个模块中使用另外一个模块中的内容
1)前提:如果想要在一个模块中使用另外一个模块中的内容,被使用的模块的模块名必须符合变量名的要求(标识符,不是关键字)
2)用法 — 必先导入再使用。(导入模块)
a. import 模块名 --导入指定模块,导入后可以通过’模块名.xxx’的方式使用这个模块中所有的内容import test #导入模块 print(test.a) print(test.name) 使用name的数据 test.f_test1() #使用函数
b. from 模块名 import 内容1,内容2… — 导入指定模块,导入后可以直接使用指定内容
from test import a,f_test1 print(a) f_test1()
c. form 模块名 import* — 导入指定模块,导入可以直接使用模块中的所有内容。
from test import * print(a) print(name) f_test1()
d.import 模块名 as 新模块名 — 导入指定模块后对对应模块进行重命名:‘新模块名.XXX’
import test as t1 #避免与下面的test重 test = 1000 print(t1.a) print(t1.name) t1.f_test1() print(test) #1000
e.from 模块名 import 内容1 as 新内容1 — 对导入的内容重命名
from test import name as t_name, a name = '小花' #如果上面导入的时候不重命名,会导致后面的name='小花'覆盖原本的name的内容 print(name) print(t_name) print(a)
三、包
1.什么是包
包含_ init _.py文件的文件夹就是包。
2.怎么使用包或者文件夹中的模块中的内容
- import 包名 — 导入指定的包,导入后可以通过’包名.XXX’去使用包中_ init _.py文件中的所有的内容。(只适用于包,文件夹不行)
import files2 #导入包(创建包的时候会自动创建出_ init _.py文件) print(files2.name)
2)from 包名 import 模块名1,模块名2,… — 导入指定包中指定的模块,导入后可以通过’模块名.XXX’使用指定模块中的内容(适用于包和文件夹)
from files2 import test2, test4, pi, f_test2 #后两个是init下的内容,可以直接导入 print(test2.msg) print(test4.abc) print(pi) f_test2()
3)from 包名 import 内容1,内容2,…(只适用于包)导入指定包中_ init _.py文件中的指定内容【直接用init文件中的内容】
4)import 包名.模块名 — 适用于包和文件夹(可以后面加as进行重命名,然后.内容来获取内容)
import files2.wea as t2 print(t2.list1)
5)from 包名.模块名 import 内容1,内容2,…
from files2.test2 import msg print(msg) from files2.abc.test3 import demo print(demo)
四、异常捕获
1.什么是异常–程序中的错误
程序出现异常(报错)会直接让程序结束运行(在哪个位置出现的异常,程序就会在哪个地方结束)
2.异常捕获 – 让程序在出现异常的时候程序不结束,还可以接着往后执行
语法结构1:–捕获所有的异常
try:
代码段1(需要捕获异常的代码)
except:
代码段2(出现异常后会执行的代码)
finally:(每个结构后都可以加finally)
代码段3 --无论如何都会执行,就算前面的代码出现异常没有捕获到,他还是会执行执行过程:先执行代码段1,执行代码段1的时候如果没有出现异常,就不执行代码段2;如果出现异常,程序不报错,并且马上执行代码段2
语法结构2(推荐使用):–捕获指定类型的异常(避免出现意料以外的异常)
try:
代码段1(需要捕获异常的代码)
except 异常类型: #出现该异常类型不会报错,执行代码段2
代码段2(出现异常后会执行的代码)
…语法结构3:–同时捕获多种
try:
代码段1(需要捕获异常的代码)
except (异常类型1,异常类型2,…):
代码段2(出现异常后会执行的代码)
…语法结构4:–同时捕获多种
try:
代码段1(需要捕获异常的代码)
except 异常类型1:
代码段11
except (异常类型2,异常类型22,…):
代码段22
except 异常类型3:
代码段33