模块导入逻辑

  • 模块只能导入一次,如果导入之后模块有修改可以使用
import module
module.xxx
from imp import reload
reload(module)
module.xxx

包和搜索路径设置

  • python不支持用绝对路径导入包: import C:\mycode\dir\mod 这么导入会报错
  • 如果模块不在可搜索的工作目录,可以使用相对路径: import dir1.dir2.mod
  • 每个非根目录的目录下必须有一个__init__.py文件
  • dir1.dir2.mod的导入路径应该是这样的
dir0\
    dir1\
        __init__.py
        dir2\
            __init__.py
            mod.py
  • init.py文件可以用python程序,也可以是全空的,扮演了包初始化的钩子
  • 当包被导入的时候,会自动执行目录下__init__.py的所有的程序,来创建程序所需要的数据文件 连接数据库等

from *语句

  • 在__init__.py中使用__all__列表来定义使用from * 语句时,需要导出什么

小demo

#分别有三个文件
# dir1\__init__.py
print('dir1 init')
x = 1 

# dir1\dir2\__init__.py
print('dir2 init')
y = 2 

# dir1\dir2\mod.py
print('in mod')
z = 3

print("------第一次运行---------")
import dir1.dir2.mod
print("------第二次运行---------")
import dir1.dir2.mod
from importlib import reload
print("------第三次运行---------")
reload(dir1)
reload(dir1.dir2.mod)

# ------第一次运行---------
# dir1 init 模块导入的时候会自动执行导入路径中init文件中的代码
# dir2 init 
# in mod 导入目标模块时会先运行一次模块代码
# ------第二次运行--------- 模块已经导入一次,再次导入不会生效
# ------第三次运行--------- 重载后,目标模块重载,但执行过程中的init不会重载
# dir1 init
# in mod

# 调用模块中的变量
print(dir1.x,dir1.dir2.y,dir1.dir2.mod.z) # 1 2 3  

# from...import的灵活调用
from dir1.dir2 import mod
print(mod.z)

from dir1.dir2.mod import z
print(z)

import dir1.dir2.mod as  t
print(t.z)

import as

import module as name
# 想当于import module ; name = module;del module
posted on 2019-11-13 20:27  盈盈的月儿  阅读(117)  评论(0编辑  收藏  举报