1.1模块
什么是模块:
在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。
为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,在python中。一个.py文件就称为一个模块(Module)
使用模块的好处:
提高了代码的可维护性。
其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们编写程序的时候也经常引用其他模块,包括python的内置的模块和第三方模块。
包(package)的概念:
如果不同的人编写的模块名相同怎么办?
为了避免模块名冲突,python有引入了按目录组织模块的方法,称为包(Package)
一个abc.py的文件就是一个名字叫abc的模块。
假设,我们的abc和qaz这两个模块名字与其他模块冲突了,于是我们可以通过包来组织模块,避免冲突,方法是选择一个顶层的包名比如MyUser。
引入包以后,只要顶层的包名不与别人 冲突,那所有的模块都不会与别人冲突。现在abc.py模块的名字就变成了MyUser.abc,qaz模块名字就变成了MyUser.qaz.
多级包结构:包.包.模块
注:每个包目录下面都会有一个——init——.py文件,这个文件是必须存在的,否则,python就把这个目录当成普通目录,而不是一个包。——init——.py可以是空文件,里面可以有程序代码,因为——init——.py就是一个模块,模块名就是MyUser
注:我们自已编写模块名时,尽量不要与内置函数或则模块名字冲突。如同与系统的模块同名,否则无法导入系统自带的模块
模块分为3种:
1.自定义模块
2.内置标准模块(又称标准库)
3.第三方模块(开源模块)
1.1.1导入模块
1 #1语法import 2 import module1,module2,module3,module4 3 4 #2from xx import xx 语句 5 from module import name1,name2 6 7 #这个声明不会把module模块导入到当前的命名空间,只会把name1,name2单个引入到执行的程序 8 9 from module.xx import name as rename 10 #把来自于modname.xx的name的重新改了一个名字,去掉用这个模块的方法 11 12 13 from module import * 14 #这提供了一个简单的方法来导入一个模块中的所有项目。这个导入的模块的方法一般不推荐使用,如果引入的其它来源的命名,很有可能覆盖已有的定义。
模块的运行本质
#1 import test #2 from modname from test
无论是1,还是2,首先通过sys.pyth找到test.py,然后执行test代码(全部执行)
区别是1会将test这个模块名加载到名字空间,而2只会将test这个变量名加载进来。
为模块添加路径
#模块运行时通过sys.path的路径一步一步查找模块的 #导入模块时是根据那个路径作为基准来进行的呢?即:sys.path #如果sys.path路劲列表中没有你想要的路径,可以通过sys.path.append("路径")来添加 #当前这是临时添加,如需永久添加则需修改系统的环境变量 import os,sys BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR)
开源模块安装的常用方法
1 1.yum 2 2.pip 3 3.apt-get
1.1.2__name__
python解释器把一个特殊变量__name__的值为__main__
#很多模块文件内容里面都有 if __name__=='__main__': 运行测试代码程序的逻辑 如果我们写的模块文件,需要被别人调用则不会运行下面的程序的逻辑 我们自已使用用,可以些运行整体程序代码的逻辑 自已用的时候 __name__=='__main__' , __name__的变量就等于'__main__',被当作模块导入到其他的文件里时, __name__的变量不等于'__main__'
1.2sys模块
1 sys.argv #在命令行参数是一个空列表,在其他中第一个列表元素中程序本身的路径 2 sys.exit(n) #退出程序,正常退出时exit(0) 3 sys.version #获取python解释程序的版本信息 4 sys.path #返回模块的搜索路径,初始化时使用python PATH环境变量的值 5 sys.platform #返回操作系统平台的名称 6 sys.stdin #输入相关 7 sys.stdout #输出相关 8 sys.stderror #错误相关