关于包和模块
(1)模块:是一个单独的.py文件,用于存放一些功能相关的代码,可以是代码更加容易维护,提高代码的重用价值
(2)包:是一个有层级的目录结构,包含n个模块或者n个子包,包中一定要有__init__.py文件
(3)库:是完成一定功能的代码集合,表现形式是一个模块,或包
(4)框架:是一个架构层面的概念,为解决一个开放性问题而设计的具有一定约束性的支撑结构,通过框架可以快速实现一个解决问题的骨架,后面按照框架中的角色去填充和交互,就可以完成质量高,维护性强的项目
(5)包和模块的作用:1.有效的对程序进行分解,方便代码的管理和维护,如造一辆车,就得先造好轮子、发动机和壳等小的零件,再将这些小零件组合,就可以做成车,同样,拿模块和包过来就可以则合成大的程序;2.避免同一模块中命名重复问题
关于包和模块的分类
(1)标准包和模块:安装python后自动下载在电脑中的包和模块,可以直接导入使用,满足用户基本的需求;其中有一些特殊的包和模块--内建包和模块,如builtins模块,其中包含了很多如print这样的常用的方法,所以内建包和模块不需要导入就可以直接使用
(2)三方包和模块:别的程序员开发的包和模块,需要用户手动去相关网站上下载安装,然后进行导入使用
(3)自定义包和模块:用户自己写的一些好的包和模块
关于包和模块的信息
(1)包和模块名:包名是包的名称,模块名是.py文件的名称
(2)包和模块位置:可以通过“print(模块.__file__)”来查看包和模块的位置信息
(3)包和模块中的内容:可以通过“print(dir(模块))”来查看列出的包和模块中的内容
关于python不同版本之间不兼容的问题
(1)不兼容对象:包和模块
(2)不兼容原因:包和模块中存在一些类,函数和属性等,如果有两个版本,1.f前者有一个名为a的函数,而后者没有;2两者都有名为b的函数,但前者只传一个参数,后者要传两个参数;3.前者本来没有名为c的函数,但后者却有。这些情况都将导致两个版本的python不兼容
关于包和模块的导入(重点)
(1)作用:可以使用包和模块中的好的模块和方法等工具
(2)包的导入方式
常规导入:方式1.import M;方式2.import M1,M2;方式3.import M as 别名。如果导入的是一个包中的模块,则需要使用“.”语法,如import 包.模块
注意:使用导入的模块中的内容时,要使用“.”语法,如M.run(),即使用导入的M模块中的run()方法
补充:直接导入一个包,则不会导入任何包中的模块,但是会执行包中的__init__.py文件的内容,这里的解决方法是1.再在__init__.py文件中对需要的模块进行导入(使用绝对路径);2.使用from 包 import 模块的形式进行导入
from A import B:使用此方式导入模块时,B一定只能写一个模块名,不能带有“.”语法,而A可以是一个包,也可以是包中的子包,可以使用“.”语法,如from 包.子包 import 模块。这里需要注意的是python中的一种面向关系,即包中只能看到模块,不能看到模块中的资源,而模块只能看见其中的资源,不能看见别的东西
from A import *(重点):这种导入方式如果是将模块中的所用资源导入过来使用,那么这里的A只能是模块;如果A是包,则是将该包中所有的模块都导入进来。需要注意的是,这里有两种特殊情况,1.在A模块中使用__all__=["a","b()"]属性时,则使用from A import *进行导入后就只能使用列表中写的属性和方法,如果没有写__all__=["a","b()"]属性,则默认可以使用A中所有的资源;2.如果A中存在受保护的或者私有的资源,则必须使用__all__=["_a","__b()"]属性进行说明,否则直接使用from A import *进行导入后,仍然无法使用这些资源