什么是模块?
在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,分组的规则就是把实现了某个功能的代码集合,放置到一个模块中,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。模块也被叫做库。
模块的作用?
1、模块内有许多函数方法,利用这些方法可以更简单的完成许多工作。
2、模块可以在文件中永久保存代码。在python交互式解释器中操作输入的代码,在退出python时是不会被保存的,而模块文件中的代码是永久存在的。
3、从实用性方面来说,模块可以跨系统平台使用,只需要Copy代码就可以。比如说,有一个全局对像,会被许多文件使用,这时为了方便把它写入一个模块中,再被调用是最好的方法。
模块的分类
内置模块 :Python官方提供的一些模块功能,比如:random,json,string,base64,pickle,sys,os等
自定义模块:根据自己需求编写的一些.py文件或一类模块以及包。
第三方模块:非Python本身自带的一些模块甚至框架。比如:request,Image,Flask,Django,Scrapy等。
怎么使用?
1.导入
模块的导入使用import语句来完成。 import module1[, module2[,... moduleN] 如果导入的模块和主程序在同个目录下,直接import就行了。
如果导入的模块是在主程序所在目录的子目录下,可以在子目录中增加一个空白的__init__.py文件,该文件使得python解释器将子目录整个也当成一个模块,然后直接通过“import 子目录.模块”导入即可。
如果导入的模块是在主程序所在目录的父目录下,则要通过修改path来解决,有两种方法:
(1)通过”import sys,sys.path.append('父目录的路径')“来改变,这种方法属于一次性的,只对当前的python解释器进程有效,关掉python重启后就失效了。
(2)直接修改环境变量:在windows中是 “ set 变量=‘路径’ ” 例如:set PYTHONPATH=‘C:\test\...’ 查看是否设置成功用echo %PYTHONPATH%,而且进到python解释器中查看sys.path,会发现已经有了新增加的路径了。这种方式是永久的,一次设置以后一直都有效。
注意:通过修改path是通用的方法,因为python解释器就是通过sys.path去一个地方一个地方的寻找模块,且当前目录优先导入。
扩展补充:
还有一种动态导入模块的方法,以字符串方式导入,可以根据用户输入,或者url等来进行动态创建导入模块的语句,案例如下:
1 inp = input("请输入要访问的url:") 2 m, f = inp.split("/") 3 obj = __import__(m) 4 # 这样导入的m模块,就被实例到对象obj。 5 6 7 # 带入带路径的模块,扩展:__import__的使用 8 # __import__("lib.xxx.xxx.xx"+ m) 默认情况下只导入lib 9 # __import__("lib.xxx.xxx.xx"+ m, fromlist=True) fromlist参数可以使它导入lib.xx.xx.xx,使多层次导入生效。默认为单层
案例代码:
1 def run(): 2 inp = input("请输入要访问的url:") 3 if hasattr(commons, inp): 4 func = getattr(commons, inp) # commons是模块,inp是对应函数 5 func() 6 else:print("不存在")
2.命名
由于Python在导入模块的时候,是按照sys.path路径去顺序查找,因此,如果在当前目录下找到的话,就会终止向下查找,因此模块的命名应该避免与第三方模块、内置模块冲突。
3.编写
模块的编写与常规函数的编写无其他区别,需要注意的就是尽量聚合一类功能的代码放入一个模块中,提高了整合度,也方便其他人来调用。同时还可以提高构建项目时,包的有序性和可维护性。
4. 几个重要的内置变量
__doc__ 函数、或者文档的注释
__file__ 获取当前运行的py文件所在的目录
__cached__ __pycache__的路径,知道就行
__name__ 1. 获取函数的名称 2.只有执行当前文件时,当前文件的特殊变量__name__ 就等于“__main__”
__package__ 输出对应函数属于哪个包 . admin.__package__
常见模块的用法
1. sys
包括了一组非常实用的服务,内含很多函数方法和变量,用来处理Python运行时配置以及资源,从而可以与当前程序之外的系统环境交互
1)sys.argv 获取一个命令行参数的list。 第一个元素是python脚本名称,其余的每个元素类似shell中传参的$1, $2, $3....$n
2)sys.path 查找模块所在目录的目录名列表。常用来添加其他目录的包或者模块
import sys, os # 程序主目录 BASE_DIR = os.path.dirname(os.path.abspath(__file__)) # 添加主目录至环境变量,通常写于文件首部位置 sys.path.append(BASE_DIR) print(sys.path[0], type(sys.path[0])) #out: E:\学习经历\python勃起\SVN目录\S13-Day05\class <class 'str'>