当前位置:网站首页>学习总结week3_3迭代器_模块
学习总结week3_3迭代器_模块
2022-08-05 05:13:00 【非鱼丶丶】
python迭代器、模块、包,异常
一、迭代器(iter)
迭代器是容器性数据类型
打印一个迭代器无法查看这个迭代器中所有的元素,迭代器也无法len获取元素个数
如果想要使用迭代器中元素,必须将元素从迭代器中取出,而且取得时候只能从上往下按顺序,取一个,少一个,取出来的数据无法再放回迭代器
1.创建迭代器方式
1)用iter将其他序列转换为迭代器
2)创建生成器
2.迭代器查操作
不管以什么方式获取到了迭代器中的元素,被获取元素一定会从迭代器消失
1)获取一个元素:next(迭代器)
2)遍历
3)迭代器转换成序列
i3 = iter('hello')
res = list(i3)
print(res)
print(next(i3)) # StopIteration!
二、生成器 - generator
具备创建多个数据的能力,而不是保存
打印一个生成器无法查看这个迭代器中所有的元素,生成器也无法len获取元素个数
如果想要使用生成器中元素,必须将元素从生成器中取出取一个,少一个,取出来的数据无法再放回生成器
生成器获取数据的方式和迭代器一样
1.创建生成器
生成器保存的并不是数据本身,而是产生数据的算法
调用带有yield关键字的函数,就可以得到一个生成器
如果被调用的函数,只要函数体中有yield,不会执行函数体,也不会获取函数返回值,而是得到生成器
2.定义生成器对应的函数
生成器创建数据的个数和数据的值,由执行生成器对应的函数的函数体的时候,会遇到几次yield,每次遇到yield的时候对应的数据来决定
遇到几次,就可以创建多少个数据;
每次遇到yield,yield后面的值是什么,对应的元素就是什么
def func2():
yield 1
yield 20
yield 3
gen2 = func2()
print(next(gen2))
print(next(gen2))
print(next(gen2)) # 一般不会这样,用循环写
def func3(subject):
for x in range(1, 100):
yield f'{
subject}{
x:0>3}'
gen3 = func3('k')
for x in gen3:
print(f'{
x}')
3.生成器产生数据的原理
调用函数创建生成器的时候不会执行函数体,获取生成器中的元素的时候才会执行函数体
每次在执行函数体的时候从开始位置开始,执行到yield就停下来,不去将yield后面的数据作为获取到的元素
三、模块 - 一个py文件就是一个模块
在一个模块中使用另外一个模块的内容:
前提:被使用的模块的模块名(py文件名)必须符合变量名的要求
使用原则:先导入才能使用,且只能使用全局变量
1.导入模块
import 模块名 - 导入指定模块,导入后可以通过’模块名.xxx’的方式使用这个模块中的所有全局变量
from 模块名 import 变量1, 变量2… - 导入指定模块中的指定变量,导入后可以直接使用
from 模块名 import * - 导入指定模块中的所有变量,导入后可以直接使用所有全局变量
import 模块名 as 新模块名 - 导入模块时对模块重命名,通过新模块名.xxx的方式用模块中的所有变量
from 模块名 import 变量1 as 新变量1, 变量2 as 新变量2… - 对导入的变量重命名
通配符 *
import iterator_1
print(iterator_1.res)
from iterator_1 import i3, func3
print(i3)
print(func3('k'))
import iterator_1 as np
print(np.gen2)
from iterator_1 import *
print(res)
from iterator_1 import i3 as i4, func3 as func6
print(i4)
print(func6('a'))
from random import randint
2.导入模块的原理
不管以什么样的方式导入了模块,或者模块中的内容,系统都会在导入模块的时候进入对应的模块,将模块中的代码全部执行
原理存在的问题:可能存在在导入模块的时候执行一些完全没有必要执行的代码
导入模块的时候选择性执行的代码:
在被导入的模块中添加指定的if语句if __name__ == '__main__':
将不需要被别的模块执行的代码放在这个语句中
import iterator_1
if __name__ == '__main__': # 在被导入的模块里,不需要执行的放在此语句的下面
# 这个if语句中的代码不会被别的模块执行
四、包和文件夹
包 - 包就是包含__int__.py
文件的文件夹
包就是用来管理py文件的,对py文件按照特定的方式进行分类
1.怎么使用包装的内容
- import 包名 - 必须是包,文件夹无意义,导入后可以通过包名.xxx的方式使用__int__.py的内容
- import 包名(文件夹).模块名 - 导入包中的指定模块
3)from 包名(文件夹) import 模块名1, 模块名2… - - from 包名(文件夹).模块名 import 变量名1, 变量名2… -
import file_manager
file_manager.func2()
import file_manager.operate_1
file_manager.operate_1.func1()
这种最好重命名
from file_manager import operate_1
operate_1.func1()
from file_manager.operate_1 import func1
print(func1())
2.包 int 文件夹的应用
创建快捷键
封装通用的工具(通用工具)
# from file_manager import func1
from file_manager import remove_file
五、异常捕获
1.异常
异常就是错误
执行程序的过程中如果出现异常,会中断程序的执行(程序提前结束)
2.异常捕获 - 让程序在出现异常的时候程序不崩溃,还可以接着执行
注意:不要滥用,导致异常原因是因为使用者使用不当时,又希望可以继续执行时,才是用异常捕获
结构1: - 捕获所有异常
try:
代码段1:需要捕获异常的代码段
except:
代码段2:捕获到异常需要执行的代码段
执行过程:先代码段1.若异常,直接马上执行代码段2;无异常则不执行代码段2
结构2: - 捕获指定异常
try:
代码段1:需要捕获异常的代码段
except 异常类型:
代码段2:捕获到异常需要执行的代码段
结构3: - 同时捕获多种异常
try:
代码段1:需要捕获异常的代码段
except 异常类型1, 异常类型2…:
代码段2:捕获到异常需要执行的代码段
结构4: - 同时捕获多种异常
try:
代码段1:需要捕获异常的代码段
except 异常类型1:
代码段2:捕获到异常需要执行的代码段
except 异常类型2:
代码段3:捕获到异常需要执行的代码段
try:
age = int(input('请输入年龄'))
if age > 18:
print('cn')
else:
print('wcn')
except ValueError:
print('yc')
边栏推荐
猜你喜欢
随机推荐
ESP32 485 Illuminance
day12函数进阶作业
The role of the range function
位运算符与逻辑运算符的区别
Redux
OFDM 十六讲 5 -Discrete Convolution, ISI and ICI on DMT/OFDM Systems
UVA10827
【过一下4】09-10_经典网络解析
Analysis of Mvi Architecture
入口点注入
The underlying mechanism of the class
day10-字符串作业
学习总结week2_5
OFDM Lecture 16 5 -Discrete Convolution, ISI and ICI on DMT/OFDM Systems
周末作业-循环练习题(2)
pycharm中调用Matlab配置:No module named ‘matlab.engine‘; ‘matlab‘ is not a package
分布式和集群
The difference between span tag and p
entry point injection
[Student Graduation Project] Design and Implementation of the Website Based on the Web Student Information Management System (13 pages)