包的研究

'''
import 模块 发生了三件事:
1,在内存中开辟一个名称空间aaa
2,自动将包下面的__init__文件中代码加载到内存。
3, 通过aaa. 获取模块中的对象。
'''
# import  from ... import ...
# 已知aaa目录下的m1.py里面
# x = 1
# y = 2
# z = 3333

# import aaa  # 实际引用的 aaa 下面的__init__文件
# print(aaa.x)
# # print(aaa.y)
# # print(aaa.z)

# 方法一:可以
# from aaa import m1
# m1.func1()

# 方法二:
# 在aaa所在的__init__.py里面加入 from aaa import m1  # 这样可以
# 然后执行
# import aaa
# aaa.m1.func1()

# 方法三:
# from aaa.m1 import func1
# func1()



# import sys
# print(sys.path)
# sys.path.pop(1)
# print(sys.path)

# import aaa
# aaa.m1.func1()


# 引用bbb
# 在aaa下的__init__.py里面写入 bbb = 'alex'
# import aaa
# print(aaa.bbb)  #alex

# 在aaa包下创建一个bbb包,bbb下的__init__.py里面写入 xx = 'oo' oo = 'xx'
# import aaa  #直接引用不到,需要在aaa的__init__.py里面写入from aaa import bbb
# print(aaa.bbb.xx)
# print(aaa.bbb.oo)


import aaa  #直接引用不到,需要在bbb下的__init__.py里面写入from aaa.bbb import m2
aaa.bbb.m2.func2()


# 总结:
# 执行文件!!的当前目录是在sys.path的第一个参数。
# 所以当前目录的文件可以直接import。
# 无论怎么样导入文件import 还是 from ... import ... 一定是从执行文件当前目录开始。


# 模块的分发

# import NB as nb
# nb.f1()
# nb.f2()
# nb.f3()
# nb.f4()
# nb.f5()
# nb.f6()

# 相对导入,绝对导入

#

# 包的总结:
# 如果要是 from 包.包.包(执行文件同一个目录,sys.path) import ... 那么 __init__ 可以不用任何操作
# .的左边一定是包
# 如果你是 import 包  __init__ 必须要各种写。


# import sys
# print(sys.path)

 

posted @ 2018-11-30 16:38  小菜鸟111  阅读(112)  评论(0编辑  收藏  举报