模块详解以及import本质

  • 定义:

模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件(文件名:test.py,对应的模块名:test)

  • 导入方法

同一目录下的导入

improt *

name = "alex"
def sayhello():
    print("hello in module_test1")

def logger():
    print("logger in module_test")
module_test1.py
import module_test1
a = module_test1.name
print(a)
module_test1.logger()
main.py

from module_test1 import logger ,name

from . import logger  从当前路径导入logger,.代表当前路径

main.py
from module_test1 import logger ,name
print(name)
logger()

from module_test1 import logger  as module_logger ,name as module_name
from module_test1 import logger  as module_logger ,name as module_name
print(module_name)
module_logger()
main.py(带别名)

import本质(路径搜索和搜索路径):导入模块的本质就是把python文件解释一遍

 

包:用来从逻辑上组织模块的,本质就是一个目录(必须带有一个__init__.py文件)

导入包的本质就是执行该报下的__init__.py文件

不同目录下的导入:

 main.py 导入module1下文件module_test2.py

import os,sys
'''
__file__:代表当前文件
os.path.abspath:获取绝对路径
os.path.dirname:获取当前目录
'''
a = os.path.abspath(__file__)#获取当前文件所在的绝对路径
print(a)
b = os.path.dirname(a)#获取当前文件所在的目录
print(b)
c = os.path.dirname(b)#获取当前文件所在目录的上一级目录
print(c)
#合写:
d = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(d)

#sys.path是寻找导入文件所在路径的列表,一般从左到右寻找
path = sys.path
print(path)
e = "%smodule1"%d
sys.path.append(e)#将上一级目录加入到列表里,才能导入该目录下的其他文件,append是加到列表最后,这里也能使用insert插入到第一个位置

import module_test2
module_test2.logger()
导入不同目录下的文件
  •  导入优化
import module_test1
#每次调用都需要花费时间去查找对应位置
module_test1.sayhello()
module_test1.logger()
#只查找一次,使用多次的时候能够减少花费时间
from module_test1 import sayhello
sayhello()
  • 模块的分类:
  1. 标准库
  2. 开元模块
  3. 自定义模块
原文地址:https://www.cnblogs.com/cheng662540/p/8138006.html