模块
使用模块的原因:
目前使用函数来编写代码虽然大幅度降低了代码冗余,并且组织结构清晰多了,
但是随着项目功能的增加如果还将代码全放一个文件中,将出现以下问题
1.维护性差
2.函数太多结构也不清晰,可读性差
3.对于相同功能的函数,如果在不同文件中都要使用,就只能复制粘贴,又出现了重复代码
什么是模块
模块就是一堆功能的集合体,以py文件的形式存在
简单的就是具备一堆函数的py文件.
模块的分类
1.自定义模块(重点学习),包含第三方模块(学习用法即可)
2.内置模块 例如time,os(主要学怎么使用)
3.经过编译后的C或C++库,以DLL形式存在(忽略吧)
4.包(本质就是一个文件夹 其中包含了一堆模块)
import 用于导入一个模块
会立即执行模块中的代码
导入模块时发生了什么
1.创建一个名称空间
2.执行模块中的代码,将内部名称与值的对应关系存储到名称空间中
3.在当前执行文件创建一个名字 该名字指向被导入模块的名称空间
注意:模块之间的名称空间是相互独立的 (所以在执行文件中修改变量不会改变模块中的值)
模块中的代码仅在第一次被导入时执行 (因此不需要重复导入同一个模块)
# pycharm会自动帮你检测 项目根目录下的模块
# 可以给你一些提示,但是对于不在跟目录下的,它可能会报错
# 这是pycharm 的问题 不影响执行
导入模块的写法:
1 import 导入模块
import 模块
模块.fun()
2 fron导入模块
# 使用from 导入时 会把import后的名字直接放入当前名称空间 # 使用时可以不用写前缀 # 注意:可能会与当前名称空间中的名字冲突 # 如果真的冲突了 会就近查找 谁最后定义我就用谁 # from functools import reduce # print(reduce) # from tools import func # print(func) # func = 1 # print(func) # 取别名 # from tools import func as f # print(f) # 一次导入多个 # from tools import func,func1 # print(func,func1) # from tools import func as f1,func1 as f2 # 一次导入全部 # *通配符 会将模块中华所有名字全部导入 # 极容易出现名称冲突,慎用 from tools import * print(func) print(func1)
# 该特殊变量 用于指定哪些名字可以被*导入 __all__ = ["func1"]