day 15 - 模块和包

一 定义

1 模块

用来从逻辑上组织python代码(变量,函数,类,逻辑,实现一个功能)

是.py结尾的python文件 ,导入后,可以直接调用其内部函数

模块名就是文件名

2 包

是用来从逻辑上组织模块

实际是一个目录 ,目录下包含.py文件,必须有一个__init__.py文件 ,实质是执行该包下的__init__.py文件

导入系统包,import 包名+模块名 

 

普通 Python 模块的搜索路径

1. 在当前模块所在路径中搜索导入模块

2. 在环境变量 PYTHONPATH 指定的路径列表中搜索导入模块

3. 在 sys.path 指定的路径列表中搜索导入模块

 

 

 

 

二 导入方法

 import module_name #导入一个模块,调用时,模块名.方法名

import module1_name,modele2_name #导入多个模块

from module import * #导入module下的所有方法

from module import fun1,fun2,fun3 #导入三个方法 ,调用时直接使用,不需要再加模块名

from module import  functionname as module_fun #调用module下的function_name方法,调用时可使用别名 module_fun ,等同于module.functionname.

 

不同目录时,需要把模块的目录添加到绝对路径下

比如,导入自定义包,在test1下新建py文件test1.py,test2.py想要调用test1包下的test1.py模块中的test方法,如何操作

test1.py代码,定义了test方法  

 

 

 

 

step1 需要知道test2.py的当前目录

import sys,os,os.path

test2_path = os.path.abspath(__file__) #__file__获取当前文件名称

print(test2_path)

 输出:

# test2.py所在的文件目录

D:\test\test2\test2.py

 

 

step2 需要知道module1模块在哪个目录下,找到上一级目录test2,再找上包含test1的文件夹名称 (test), 因此需要返回两层目录

os.path.dirname(test2_path)

test_path= os.path.dirname(os.path.dirname(test2_path))

输出:

D:\test

 

 

 step3 需要将test_path添加到sys.path下(这样调用时,才能找到相对应的文件)

#将D:/test添加到sys.path

os.sys.path.insert(0,test_path)

 

 step4 导入自定义的包+模块,调用test1.py下的 test()函数

from test1.test1 import *

print(test())

 

 

 

# 导入自定义包,test2.py,想要调用test1包下的test1.py模块中的test方法

import sys,os.path
test2_path = os.path.abspath(__file__) #获取当前文件目录
print(test2_path)

#查看test1模块所在的上一级目录
test_path =os.path.dirname(os.path.dirname(test2_path))
print(test_path)

#添加test到绝对路径下
os.sys.path.insert(0,test_path)
print(sys.path)

#test1 是文件夹名称(test1.py模块的上一级目录),导入只能导入包+模块
from test1.test1 import *

print(test())

 

 

 

 

三 导入本质

import,本质是被执行了模块的代码,赋值给模块变量module,相当于module==all code 

from module import fun1, 本质是把module模块的某一部分(fun1),执行了一遍

posted @ 2019-12-16 10:44  时光静好00  阅读(196)  评论(0)    收藏  举报