一、模块:

  1.简单的描述:一个.py文件 

  2.好处:大大提高代码的可维护性

  3.模块三种:1.python标准库

       2.第三方模块

         3.应用程序自定义模块(*****)   

  4.import实质就是:1.执行对应文件 2.引入变量名

            在内置函数中__import__导入文件的时候与import不同

            import spam 

                 spam = __import__('spam', globals(), locals(), [], 0)

  5.导入模块其实就是告诉Python解释器去解释那个py文件 

1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 
4 
5 # import module_test
6 # from module_test import xx
7 # from module_test import xx as rename
8 # from module_test import *  不推荐 容易覆盖

二、包

  1.避免模块名重复,组织模块的 init文件

  2.导入一个包,就是告诉解释器解释该包下的 __init__.py 文件

  <1>创建一个package_name的文件夹嵌套包web如图:

    Python之package、module

    (1)创建一个cal.py文件代码如下       

1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 
4 
5 def add(x, y):
6     return x+y
7 
8 
9 print(__name__)

    (2)再创建test.py文件

        导入模块cal.py方式:

        三种常规导入:

1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 
4 import sys
5 import os
6 from web.web1.web2 import cal
7 # from web.web1.web2.cal import add
8 # from web.web1 import web2  # 就是在执行web2的init的文件  不支持调用方式除非在web2下init文件里边添加cal的导入路径

      调用模块的函数:在第三种导入方式就会报错

1 # print(cal.add(2, 3))
2 # print(add(2, 3))
3 # print(web2.cal.add(2, 3))   # 报错AttributeError: module 'web.web1.web2' has no attribute 'cal'
4 # print(web2.cal.add(2, 3))  # web2下在init文件下导入了模块cal

      web2包下的__init__.py文件

 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 from . import cal 

解释器只认识sys.path里边的路径

 1 # print(sys.path)  # 解释器只认识sys.path里边的路径,看解释器路径
 2 # ['F:\\abc\\todostart\\package_name',.....] 打印一堆路径
 3 
 4 # print(__name__)   # __main__
 5 # 在cal文件下打印print(__name__)   执行文件test.py  web.web1.web2.cal  __main__
 6 
 7 # if __name__ == '__main__':1.放在cal中测试文件功能1:用于被调用文件的测试
 8 # 2.在执行文件test.py中加上  可以调用我的程序 但是不能执行我的run_test()主函数
 9 
10 # print(__name__)放在调用文件中main 放在被调用文件中就是文件名
 1 def run_test():
 2     print('......')
 3 
 4 
 5 if __name__ == '__main__':
 6     run_test()
 7     print(__file__)
 8     print(os.path.dirname(__file__))
 9     print(os.path.dirname(os.path.dirname(__file__)))
10     print(os.path.dirname(os.path.abspath(__file__)))
11     """
12     dirname 拿到此文件的上一级目录
13     abspath绝对路径
14     web.web1.web2.cal
15     ......
16     F:/abc/todostart/package_name/test.py
17     F:/abc/todostart/package_name
18     F:/abc/todostart
19     F:\abc\todostart\package_name
20 """
又在扯把子玩法

相关文章: