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")

 

原文地址:https://www.cnblogs.com/anttech/p/11810474.html