迭代器生成器和模块
迭代器
1.迭代器定义(iter) - 容器型数据,只能通过类型转换和生成器来获取迭代器对象
存储数据特点:可以同时保存多个数据,无法直接查看,需先将数据取出,取出后不能放回
所有容器都可以转换为迭代器
2.获取元素
1)遍历
iter5 =iter('hello!')
for x in iter5:
print(f'x:{x}')
print(list(iter5))
2)获取单个元素
next(迭代器对象) - 获取迭代器最前面的一个元素
迭代器对象.next() - 获取迭代器最前面的一个元素
生成器
1.生成器定义
a.生成器就是迭代器
b.调用带有 yield 关键字函数得到一个生成器
2.生成器中产生数据
生成器产生数据数量与函数体遇到 yield 次数相同, yield 后面表达式的值就是生成器产生的数据
3.生成器产生数据原理
获取生成器元素时,调用关联函数,执行函数体遇到 yield 停止,并且 yield 后值为获取到的数据,再次获取元素时,从上一次停止处开始执行,直到遇到 yield ,若没有遇到 yield 就不会产生数据(next获取时会报错)
def create_ma():
from random import choices
str1 = '0123456789asdfghjkl'
while True:
str2 = choices(str1, k=4)
yield ''.join(str2)
gen1 = create_ma()
print(next(gen1))
print(next(gen1))
生成式
生成式就是生成器的简写
列表推导式的[]变成()就变成生成式
模块
1.模块定义 - 一个模块就是一个py文件,文件名就是模块名
2.在一个模块中使用另外一个模块内容
1)哪些能用:所有模块中全局变量
2)导入模块
import 模块名 - 可以使用所有全局变量,以’模块名.变量’来使用变量
from 模块名 import 变量1,变量2,变量3,… - 可以使用指定变量,直接使用变量
from 模块名 import * - 可以使用所有全局变量,直接使用变量(不推荐使用)
import 模块名 as 新模块名 - 导入模块时给模块取别名,使用模块时使用新名字
from 模块名 import 变量1 as 新变量1,变量2,… - 模块中变量取新名字
导入模块原理
1.导入模块原理
当使用 import 或者 from-import 导入模块时,,系统将模块中所有代码执行,
重复导入同一个模块,模块只会执行一次
2.选择性执行被导入内容
不希望被其他模块执行的代码放到 if 语句中(if name == ‘main’😃
原理:
每个模块都有一个属性:name,用来保存当前模块名字,默认值是模块名,当模块执行时,模块__name__属性自动变成’main’
包的使用
1.包的定义 - 里面都是py文件的文件夹,自带一个 init.py 的文件
2.数据导入
1)直接导入
a.from 包 import 模块
b.from 包.模块 import 变量
2)导入的定制 - 编辑 init.py 文件