模块
什么是模块
- 本质就是一个.py文件
- 一个py文件就是一个模块。
- python封装语句的最小单位:模块(py文件)
- 模块不宜过大(1000行~2000行)
- 自定义模块:实际上就是.py
模块的成员
- 模块的成员:(可执行语句,不立即执行语句)模块中的变量,for循环,if结构,函数定义
- 可执行语句,不立即执行语句
- 可执行语句:定义变量。函数调用。循环语句。if条件判断。
- 不立即执行:函数定义
- 模块的运行方式:
- 脚本方式:(直接用解释器执行,pycharm中run运行)
- 模块方式:被其他的模块导入执行。为导入它的模块提供资源。(函数定义。变量。类定义等..。)
#模块的导入
- 自定义被其他模块导入时,其中的可执行语句会立即执行。
python中怎么判断自定义模块属于开发阶段还是使用阶段
__name__ 方法:
如果是以脚本方式运行:固定字符串'__main__'
如果是以导入方式运行:__name__所处模块的名字
系统在导入模块时的路径问题
- 内存中:如果之前成功导入过某个模块,直接使用已经存在的模块。
- 内置路径中:安装路径下:Lib
- PYTHONPATH:import 时候寻找模块的路径
- sys.path:用C语言集成在解释器。是一个路径的列表。
- 总结:如果都找不到,就报错
- 动态修改sys.path
sys.path
- 添加需要添加模块的路径到sys.path
- sys.path.append(r'F:\PyCharms wenjian\day15\a')
- 使用相对位置添加路径(——file——)
- 使用os模块找到一个路径的父路径(os.path.dirname)
#导入模块的多种方式。
- import xxx (xxx模块名) 导入一个模块的所有成员
- import XXX,XXX (XX多个模块名) 导入多个模块的成员(不推荐使用)(os,sys 可以考虑一起写)
- from XXX import a (从XX导入a)从某地方(xxx)导入指定的a
- from xxx import a,b,c 从某地方(xxx)导入多个a,b,c
- from xxx import * 从某地方导入全部成员
- import xxx 与form xxx import * 区别:
- import xxx:使用其中成员 必须使用模块名作为前缀。不容易产生命名冲突
- form xxx import * : 无需指定模块名作为前缀。直接使用成员名即可(容易产生命名冲突,在后定义的成员生效。)
- 怎么解决命名冲突问题:
- 改用import 方式。
- 使用别名解决冲突。
- 自己避免使用重名名称
使用别名(alias)
- 给成员起别名,为了避免名称冲突:
- from d15上课 import a as aaa
- 给模块写别名,简化书写
- import d15上课 as aa
print(aa.a)
导入模块所有成员
form 模块名 import *
_all_
-__all__ 是一个列表,用于表示本模块可以被外界使用的成员。元素是成员名的字符串。(控制可以使用的成员)
-__all__ 放置在定义模块中(表示该模块可以被调用的元素名)(使用字符串形式书写)
__all__=['a1',"a2"]
相对导入
- 在同一个文件夹(项目)下的两个模块,将一个模块导入另一个模块。(相对导入)
- 相对路径(。表示当前路径 ..上级路径)