Python Day5 模块 包

 一:区分Python文件的2种用途

  1个Python文件的2种用途

  1.1 当作脚本执行:        if __name__ == '__main__':

  1.2 当作模块导入使用     if __name__ == '模块名':

            if __name__ == '__main__':

               pass

     spam.py

    说明 在Python内有一种方法     

__name__   这种方法在文件当中默认等于__main__    (此处为2个_)  这样的作用就是。代码可以调试的时候运行的是整个spam.py
 1 money = 1000
 2 
 3 
 4 def index():
 5     print('in the index', money)
 6 
 7 
 8 def bbs():
 9     print('in the bbs', money)
10 
11 
12 def delphi():
13     print('in the delphi', money)
14 
15 
16 if __name__ == '__main__':
17     bbs()
18     delphi()
19     index()
20     print('调试功能')
21 
22 print(__name__)  # __main__
View Code

写完后本地调用直接运行;其他地方需要引用默认不会输出

二:模块的搜索路径

  1   内存

      

sys.modules  查看已经加载到内存的模块

  2   内置模块   sys   内置模块都是C语言写的

  3 自己定义的模块    sys.path-->查看当前环境变量

需要加入到环境变量才可以执行:

自己定义模块的时候 不能定义跟内置一样的模块

三: 包

    1.什么是包

        包就是1个包含__init__.py的文件夹,(可以往该文件夹下放一堆子模块)

 在python3中,即时包的文件夹下没有__init__.py文件 python3也不会报错,但是python2会报错

 之所以这样做是因为在import package1的时候,看似导入的是package1   实际上导入的是它下面的__init__.py文件

示例如下

在__init__.py中写入:

 然后在包的导入.py文件中执行导入操作后的执行结果

 ================示例1 begin===================

init文件

 

 解释如下:

当包的使用.py运行时,import package1 实际上是导入运行了package1文件夹下的init文件;

然后在执行

from package1 import m1
在package1下的m1被导入了init当中
因而最后包的导入中的package1.m1.func()就可以运行了

 ================示例1 end===================

 注意核心是:根据执行文件所在的路径去找,只有执行文件所在的路径才会加到环境变量当中

2   包的使用

      注意:但凡在导入时,出现.   (点)   这是导入包才用的语法

点的左边必须是一个包;使用的时候没有限制

以上的导入方式太麻烦了;那么针对此;有没有简便的方法?

=====================================示例2==================================================

 要实现该功能,只要在D:DocumentPython0404day5模块和包测试2package1\__init__.py中写入

上面的导入方式是绝对导入

 之所以要这么做   是为了区分开开发者和使用者

=============================================示例3===========================================

原先结构不变;

 

 程式照样运行

注意点   相对导入是从当前init的路径下开始找      .   点  表示当前文件夹

一个点就表示往上一层

1 from ..m1 import func1
2 def func2():
3     func1()
4     print('in the func2 m2')
View Code
原文地址:https://www.cnblogs.com/nodchen/p/8991591.html