简介
随着程序的开发,功能会不断添加,为了使结构清晰、易于维护,我们通常会将其拆分成好多个文件。除此之外,还可能会在多个程序中使用一些已编写过的函数或变量,但为了程序的简洁又不想重复定义函数或变量,为此,可以将已经定义好的函数或变量放在一个文件中,这样的文件被称为模块。或者可以直接将Python文件理解为一个模块。
定义:
用来从逻辑上组织Python代码(变量、函数、类、逻辑:实现一个功能)本质就是.py结尾的Python文件(文件名:test.py, 对应的模块名:test)
导入方法:
import moduleName
from moduleName import * (*是通配符,所以会把module里所有变量和函数等都导入到新的Python文件中,如果不想全部导入我们可以按需导入某个具体函数,即将*改为你想导入的函数名即可,可以同时导入多个函数)
from moduleName import func as newFunc(相当于给导入的函数起一个新的模块名)
下面两种方法在新的Python文件中都不需加上模块名前缀就可以直接使用
模块import本质:
导入模块的本质就是把Python文件解析一遍,并在导入的文件中重新定义一个同模块名的变量,将前面解析的内容赋值给这个新定义的模块名,这时我们就可以通过这个模块名调用里面的函数和变量了(这时新定义的模块名指向导入的模块)
form module import func本质:
相当于在导入的文件中直接从module中复制出一份func函数导入到文件中,这时就相当于在导入的文件中定义了func函数一样,所以我们直接通过函数名或变量名直接使用,不需加上模块名前缀
包的定义:
用来从逻辑上组织模块的,本质就一个目录(必须带有一个__init__.py文件)
包的import本质:
导入包的本质就是执行该包下的__init__.py文件
如果模块在其他包中,而导入包又是一个目录,导入包的本质就是执行该包下的__init__.py文件,那么怎么导入该包中的模块呢?我们可以通过修改搜索路径来找到该模块
import sys, os
x = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #根据模块位置定义路径
sys.path.append(x) #将该搜索路径添加到环境变量中去
from 包名 import 模块名
模块名.属性()
也可以通过修改导入的包的__init__.py文件来导入该模块,即在导入的包中的__init__.py文件中先导入该模块(from 包名 import 模块名 相对导入)