import的一些知识和自己测试的结果。
定义
模块:从逻辑上组织python代码,本质就是一个.py文件
包: 从逻辑上组织模块的,本质上就是一个目录(必须包含init.py)
import的本质
import模块 本质把python代码解释一遍,然后赋值给某块名
import包 本质把init.py的代码解释一遍,并赋值给包名
导入方法
导入模块
import moudle_name: 导入模块 ==> 将moudle的全部代码加载到内存(运行)并赋值给与模块同名的变量写在当前文件中,这个变量的类型是’module’
1 | # [+] main_code |
from moudle_name import function or value:导入某块中的函数或者变量===>将moudle中的代码加载到内存(运行),并将import的函数或者变量赋值给function或者value[未import的没有赋值给对应的函数名或者变量名]
1 | # [+] main_code |
from moudle import *:同上,只不过是导入了moudle的所有内容,不建议使用,因为如果自己构建的函数与moudle中的函数重名的话,相当于重写了moudle中函数了。
from moudle import 函数 as 别名: 导入某块中的函数或者变量并取一个别名===>将moudle中的代码加载到内存(运行),并将import的函数或者变量赋值给别名。
导入包
import package_name ==>等价于把package的init.py当作模块导入了,其他的模块都无法使用。[所以此方法不可用]
from package_name import *: ===>等价于import package_name
from package_name import moudle_name ===>把init.py和moudle一起加载到内存中(运行),并将moudle中的代码赋值给moudle_name
from package_name import moudle_name as 别名 ===>把init.py和moudle一起加载到内存中(运行),并将moudle中的代码赋值给别名
1 | # [+] main_code |
当然也可以import package_name.moudle_name这样调用,但是十分的麻烦,因为调用的模块代码会存放在package_name.moudle_name这个变量里面。
导入叔目录下的包或者模块
查看环境变量:sys.path 返回值是一个list
查看当前文件的相对路径:file
查看当前文件的绝对路径:os.path.abspath(file) ===>c:/python_demo/core/main.py
返回目录名:os.path.dirname(os.path.abspath(file)) ==>c:/python_demo/core/
1 | [+] main_code |
注意:sys.path是环境变量,os.path不是。