Day 13 模块与包
几点总结
-
lambda 匿名函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数
-
匿名函数在调用时,需要给形参传入实参
print((lambda i, j: i + j)(2,3)) #传入指定参数
print((lambda i, j: i + j)(2,3)) sum_1 = lambda i, j: i + j list1 = [sum_1(k,m) for k in range(1,5) for m in range(2,6)] # 每次只能给匿名函数传入一次参数,只执行一次 print(list1)
-
字典可以用来保存一个对象的两种属性,规定排序规则
-
sorted(序列,lambda 变量(代表序列中的每一个元素) : 返回值(将变量中的元素进行加工处理,使之按照某种方式进行排序)
""" map(函数,序列,序列) 函数的要求: 有且只两个参数,,代表后面序列中的每个元素 有一个返回值,返回值就是新序列中的元素 """
生成器
"""
1)
生成器是一种容器,(是一种可以创建多个数据的容器),生成器中
保存的是创建数据的方法,而不是数据本身.(可以下蛋的母鸡)
2) 特点
打印生成器,无法查看元素;
不能通过len()统计元素的个数;
如果需要生成器中的数据,必须将数据取出,而且也是取一个就少一个
生成器获取元素的方式和迭代器获取元素的方式一样
内存节省(只计算母鸡的内存)
"""
-
创建生成器
""" 调用带有yield关键字的函数,就可以得到一个生成器 调用函数 执行函数体 输出返回值 """
def func1(): # 用函数创建生成器 print('hello') yield return 100 result = func1() print(f'result:{result}') #result:<generator object func1 at 0x0000025B39EF6510>
-
获取生成器中的元素
""" 怎么控制生成器 中元素的个数和元素的值 执行创建生成器的函数体的时候,会遇见几次yoild,对用的生成器就可以创建 多少个数据,每次遇到 yeild,yeild后面的值就是创建出来的数据 """ def func2(): print('+++++') yield 100 print('------') yield 200 print('=======') yield 300 gen2 = func2() print(gen2) # #<generator object func2 at 0x0000025B3A00BF20> print('next:', next(gen2)) print('next:', next(gen2)) print('next:', next(gen2)) # print('next:', next(gen2)) # 报错!
def func2(): for i in range(100): print('+++++') yield 100 print('------') yield 200 print('=======') yield 300 gen2 = func2() print(gen2) print("---------------------------------------------是非对错---------------------------------------") print('next:', next(gen2))# 100 print('next:', next(gen2))# 200 print('next:', next(gen2))# 300 print('next:', next(gen2))# 100 print('next:', next(gen2))# 200 print('next:', next(gen2))# 300 print('next:', next(gen2))# 100 yield 相当于 return
模块
py文件 就是一个模块
怎么在一个模块中使用另外一个模块中的内容
在别的文件中的代码不能直接用
使用前提:
被使用的内容所在的模块的模块名 必须符合变量名的要求
import + 模块名 导入指定模块 ,通过模块名.xxx来使用模块中的代码
模块必须在同一个项目里面
from 模块名 import 内容1 , 内容2 导入模块的指定内容,直接使用
from 模块名 import * 导入指定模块可以直接使用模块中所有内容
import 模块名 as 新模块名 导入指定模块后对模块进行重命名
from 模块名 import 内容1 as 新1, 内容2 as 新2 对导入的内容进行重命名
包
-
包含
__init__.py
文件的文件夹就是包 -
使用包中的模块
""" 使用包中的模块 import 包名 (只适用于包,导入后可以通过 包名.xxxx 使用 __int__.py 文件中的内容) from 包名 import 模块1,模块2,模块3,,, 导入指定的包或者文件夹中的模块, 模块名.xxx 使用模块中的东西 from 包名 import 内容1,内容2,,, 只适用于包,调用__int__.py 中的内容 import 包名.模块 适用于包和文件夹 import 包名.模块名 as 新名字 适用于包和文件夹 from 包名.模块名 import 内容1 内容2 """
异常捕获
-
异常 - 程序出现异常(报错)
-
异常捕获 - 让程序在出现异常的时候程序不结束,还可以接着往后执行
""" try 语法结构: try: 代码段1 except: 代码段2 """
""" 语法结构2: try: 代码段1() except 异常类型: 代码段2 finally: (每种都可以加) 代码段3 (无论如何都会执行的代码,代码段1,2 执行情况如何 代码段3都会执行,,,,用来写遗书的) (用来交代后事) (可以用来保存闪退时候,对数据的保存) """
""" 语法结构3 try: 代码段1() except (异常类型1,异常类型2): 代码段2 """
""" 语法结构2: try: 代码段1() except 异常类型1: 代码段21 except 异常类型2: 代码段22 except (异常类型3,异常类型4): 代码段23 """ try: print("abd"[4]) except IndexError: print("出错") finally: print("遗书")