python 包 
 

 1-模块 
 
 .一个模块就是一个包含python代码的文件,后缀名是.py就可以,模块就是个python文件 
 
 .为什么用模块 
 
     .程序太大,编写维护非常不方便,需要拆分 
 
     .模块可以增加代码重复利用的方式 
 
     .当作命名空间使用,避免命名冲突 
 
 .如何让定义模块 
 
 .模块就是一个普通文件 
 
 .不过根据模块的规范,最好在模块中编写以下内容 
 
     .函数(单一功能) 
 
     .类(相似功能的组合,或者类似业务模块) 
 
     .测试代码 
 
 .如何使用模块 
 
     .模块直接导入 import module_name 
 
     .module_name.func_name 
 
     .module_name.class_name 
 
     #包含一个学生类 
 
     #一个sayhello函数 
 
     #一个打印语句 
 
     #p01.py 
 
     class Student(): 
 
         def __init__(self,name='noname',age=18); 
 
             self.name=name 
 
             self.age=age 
 
         def say(self): 
 
             print('my name is {0}'.format(self.name)) 
 
     def sayhello(): 
 
         print('欢迎来到哈尔滨') 
 
     print('我是p01模块') 
 
     #p02模块 
 
     import p01 
 
     stu=p01.Student('xiong',20) 
 
     stu.say() 
 
     p01.sayhello() 
 
     .我们可以借助importlib包实现导入以数字开头的模块名称 
 
         .tu=importlib.import_module('01') 
 
     .import 模块 as 别名 
 
         .import p01 as p 
 
     .有选择性的导入from module_name import func_name,class_name 
 
     #案例 
 
     from p01 import Student 
 
     stu=Student 
 
     .from module_name import * 
 
     . 导入模块所有内容 
 
     .if __name__=='__main__'这条语句建议一直作为程序的入口 
 
         .可以有效避免模块代码被导入的时候被动执行的问题 
 
         .建议所有程序的入口都以此为代码为入口 
 
 2-模块的搜索路径和存储 
 
 .什么是模块的搜索路径 
 
     .加载模块的时候系统会在哪些地方搜寻此模块 
 
 .系统默认的模块搜索路径 
 
     import sys 
 
     sys.path属性可以获取路径列表 
 
     #案例 
 
     import sys 
 
     print(type(sys.path)) 
 
     print(sys.path) 
 
     for p in sys.path: 
 
         print(p) 
 

 .添加搜索路径 
 
     sys.path.append(dir) 
 
 . 模块的加载顺序 
 
     .1上搜索内存中已经加载好的模块 
 
     .2搜索python的内置模块 
 
     .3搜索sys.path路径 
 
 3-包 
 
 .包是一种组织管理代码的方式,包里面存放的模块 
 
 .用于将模块包含在一起的文件夹就是包 
 
 .自定义包结构 
 
     包 
 
     __init__.py包的标志文件 
 
     模块1 
 
     模块2 
 
     子包 
 
     __init__.py 
 
     子包模块1 
 
     子包模块2 
 
 .包的导入操作 
 
 .import package_name 
 
 .直接导入一个包,可以使用__init__.py中的内容 
 
 .使用方式是:packsge_name.func_name/package_name.class_name.func_name 
 
     .import package_name as p具体用法与作用跟上述简单导入一致 
 
     .注意的是此种方法是默认对__init__.py内容的导入 
 
 .import package.module 
 
     .导入包中某一个具体的模块 
 
     .使用方法 
 
         .package.module.func_name