模块就是一个包含了python定义和声明的文件,文件名就是模块的名字加上.py后缀
- import加载的模块一共分成四个通用类别:
1.使用python编写的py文件
2.已被变异为共享库或者DLL或C或者C++的扩展
3.包好一组模块的包
4.使用c编写并连接到python解释器的内置模块
- 导入模块过程:
1.如果已经导入则不再导入
2.如果未导入,则为导入的模块创立新的名称空间
3.在新创建的名称空间中运行该模块在当前模块中引用的名字
4.创建模块的名字.使用该名称作为该模块在当前模块中引用的名字
- global表示把全局的内容引入到局部。但是这个局部指的是py文件。即global指向的是模块内部。并不会改变外部模块的内容
- 如果在不同的模块中引入了同意模块。并且在某一个模块中改变了被引入模块中的全局变量。则其他模块看的值也跟着变。原因是python的模块只会引入一次,大家共享同一个名称空间
- 一次可以引入多个模块
import time, random, json, mokuai
正确的导入模块的顺序:
1.所有的模块导入都写在最上面,这是最基本的
2.先引入内置模块
3.在引入拓展模块
4.最后引入自己定义的模块
- 如果当前文件中出现了重名的变量时,会覆盖掉模块引入的那个变量
- 我们自己创建的py文件的名字不要和系统内置的模块重名**
包是一种通过'.模块名'来组织python模块名称空间的方式,包内必须存在__init__.py文件。包的本质就是一个文件夹,提高程序的结构性和可维护性
绝对导入,以最顶级包作为起始
相对导入:用. (当前文件夹os.mkdir(f'./info_ftp/{username}'))或者.. (上一级文件夹)作为起始
#绝对导⼊入 from glance.cmd import manage manage.main() #相对导⼊入 # 这种情形不不可以在versions中启动程序. # attempted relative import beyond top-level package from ..cmd import manage manage.main()
包的注意事项:
1.关于包相关的导入语句也分为import和from xxx import xxx两种,但无论使用哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时导带点的,点左边的都必须是一个包。否则报错。可以带一连串的点,比如a.b.c 2.import导入文件时。产生名称空间中的名字来源于文件,即包下的__init__.py,导入包本质就是在导入该文件 3.包A和包B下游同名模块也不会冲突,如A.a和B.a来自两个名称空间