python基础之模块导入
1.定义
模块:本质就是以.py结尾的Python文件(例如:文件名为test.py,对应的模块名为:test),用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能)。
包:用来从逻辑上组织模块,本质就是一个目录(必须带一个__init__.py文件)
2导入方法
(1)import module_name 或者 import module_name1,module_name2(导入多个模块)
实例1:
创建一个模块,文件名字为module_test.py
#Author:Anliu
bar="ERROR"
def logging():
print("this is a test logging...")
def printing():
print("this is a test printing...")
def reading():
print("this is a test reading...")
将module_test.py文件导入到test_file1.py文件中
#Author:Anliu
import module_test
print(module_test.bar)
module_test.reading()
执行结果如下:
ERROR
this is a test reading...
Process finished with exit code 0
(2)from module_name import *
实例2:
将实例1中的module_test模块导入到test_file2.py中
#Author:Anliu
from module_test import *
print(bar) #此种方法导入模块在使用模块中的方法或者变量等时,不再需要module_name.funcation了,直接应用即可。
logging()
向test_file2.py文件中添加一个与模块同名的方法。
#Author:Anliu
from module_test import *
print(bar) #此种方法导入模块在使用模块中的方法或者变量等时,不再需要module_name.funcation了,直接应用即可。
logging()
printing()
def printing():
print("this is a printing function from test_file2.py")
printing()
执行结果
ERROR
this is a test logging...
this is a test printing...
this is a printing function from test_file2.py
Process finished with exit code 0
由此可见,此种导入模块,当模块的方法与文件当前的方法有冲突时,执行的结果将不准确,这与import的本质有关。于是乎就产生了下种导入方式。
(3)from module_name import function as alias
实例3:将实例1中的module_test模块导入到test_file3.py文件中
#Author:Anliu
from module_test import printing as mod_printing
def printing():
print("this is a test from test_file3.py")
printing()
mod_printing()
执行结果如下:
this is a test from test_file3.py
this is a test printing...
Process finished with exit code 0
这也使用别名的方法即可实现对模块中方法的调运。
3.import的本质
导入模块的本质就是把python文件解释一遍。
导入包的本质就是执行包下的__init__.py文件。
4.路径查找
在不同目录下的模块导入时,需要路径的切换。
实例4:
#Author:Anliu
import sys,os
print(sys.path)
print(os.path.abspath(__file__))
print(os.path.dirname(os.path.abspath(__file__)))
print(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
x=os.path.dirname(os.path.dirname(__file__))
sys.path.append("x/module_test")