1、迭代器
1.1 什么是迭代器(iter)
容器,可以同时保存多个数据,无法直接创建,只能将其他序列转换成迭代器
1.2 特点
- 打印迭代器无法查看元素,也不支持len操作
- 如果要使用迭代器中的元素,必须将元素从迭代器中取走,而且取一个少一个,每次只能取最前面的那个元素
1.3 查-获取元素
注意:不管以什么样的方式获取到了迭代器中的元素,对应的元素都会从迭代器中消失
- 获取单个:next(迭代器)
il = iter('hello')
print(next(li))
print(next(li))
print(next(li))
print(next(li))
print(next(li))
print(next(li)) #报错
- 遍历
i2 = iter([10,20,30,40,50])
print(next(i2))
for i in i2:
print(f'i:{i}')
2、生成器
2.1 什么是生成器
- 容器;是一种可以创建多个数据的容器。
- 生成器真正保存的不是数据,而是创建数据的方法
- 打印生成器无法查看元素;也无法通过len统计元素
- 生成器只会在需要数据的时候去创建数据,而且数据生成一个少一个
- 生成器获取元素方式与迭代器一样
2.1 怎么创建生成器
调用带有yield关键字的函数就可以得到一个生成器
调用函数中有关关键字
def func1():
print('--------------------------------------------------')
print('asdc')
yield
return'yhj'
result = func1()
print(f'result:{result}')
2.2 怎么控制生成器产生的数据和个数的值
生成器能创建多少个数据就看执行创建生成器的函数的函数体的时候会遇到几次yield,每次遇到yield的时候,yield后面的值就是可以创建出来的数据
def func2():
yield 100
yield 200
yield 300
g1 = func2()
print(list(g1))
3、模块
3.1 如何在一个模块中使用另一个模块中的内容
- 被使用的模块的模块名必须符合变量名的要求
- 被使用的模块中的内容必须导入后才能使用
3.2 如何导入模块
'''
导入方式1:
import 模块名 -导入指定模块,导入后可以通过‘模块名.xxx的方式使用这个模块中所有的内容’
导入方式2:
from 模块名 import 内容1,内容2,... -导入指定模块,导入后可以直接使用模块中指定的内容
导入方式3:
from 模块名 import * -导入指定模块,导入后可以直接使用模块中所有的内容
导入方式4:
import 模块名 as 新模块名 -导入模块的时候对模块重新命名(导入指定模块,导入后可以通过新模块名.xx的方式使用内容)
导入方式5:
from 模块名 import 内容1,内容2,as 新名字,内容3...对内容重名
'''
print('-----------------导入方式1-------------------')
import test1
print(test1.str1)
test1.shuchu()
print('-----------------导入方式2--------------------')
from test1 import str1,shuchu
print(str1)
print('-----------------导入方式3--------------------')
from test1 import *
print(str1)
print('-----------------导入方式4--------------------')
import test1 as yy
print(yy.str1)
# ====================导入方式5==================
# from test1 import name as t_name, func1
# name = '小红'
# print(name)
# print(t_name)
#
# func1()
3.3 导入模块的原理
不管以任何方式导入模块,导入模块的时候都会自动执行这个模块中所有的代码
# 放在这个if语句里面的代码在被别的模块导入的时候不会执行
if __name__ == '__main__':
4、包 -包的本质就是文件夹
包含__init__.py文件的文件夹就是包(用来保存py文件的文件夹叫做包)
4.1使用包或者文件夹中的模块中的内容
'''
导入方式1:
import 报名 -导入指定的包,导入后可以通过包名.xxx的方式使用包中__int__。py文件中的所有内容
导入方式2:
import 包名.模块名
导入方式3:
from 包名 import 模块名1,模块名2...
导入方式4:
from 包名.模块名 import 内容1,内容2.。。
'''
# --------------------导入方式1--------------------
# import p1
# print(p1.age)
# --------------------导入方式2--------------------
# import p1.test3
# print(p1.test3.m)
# import p1.test3 as pt3
# print(pt3.m)
# --------------------导入方式3--------------------
# from p1 import test3, test4, age
# print(test3.m)
# print(test4.n)
# print(age)
# --------------------导入方式4--------------------
# from p1.test3 import m
# print(m)
# from p1.abc.test5 import gender
# print(gender)
5、异常捕获
5.1 异常
执行程序的时候如果出现异常(报错),程序直接结束终止执行。
5.2 捕获异常
捕获异常就是让程序在出现异常的时候,程序不报错还可以继续执行
5.3 什么时候需要做捕获异常
程序员写代码的时候知道某个位置可能会因为使用者的使用方法不对导致程序报错,但是又希望如果是操作不当出现异常的时候程序又可以接着执行
5.4 怎么获取异常
'''
语法1
try:
代码段1(需要捕获异常)
except:
代码段2(捕获到异常以后会执行的代码)
执行过程:先执行代码段1,如果没有异常,不会执行代码段2,直接执行后续的其他代码;如果出现异常
马上执行代码段2(代码段1后面还没来得及执行的部分不执行)
语法2
try:
代码段1(需要捕获异常)
except 异常类型:
代码段2(捕获到异常以后会执行的代码)
语法3 针对不同的异常做相同的处理
try:
代码段1(需要捕获异常)
except (异常类型1,异常类型2,。。。):
代码段2(捕获到异常以后会执行的代码)
语法4 针对不同的异常做不同的处理
try:
代码段1(需要捕获异常)
except 异常类型1:
代码段2(捕获到异常以后会执行的代码)
except 异常类型2:
代码段3(捕获到异常以后会执行的代码)
except 异常类型3:
代码段4(捕获到异常以后会执行的代码)
'''
try:
age = int(input('请输入你的年龄(年龄是整数!):'))
if age >= 18:
print('成年')
else:
print('未成年')
except ValueError:
print('年龄输入有误!')