模块(Modules):通常把能够实现某一特定功能的代码放置在一个文件中作为一个模块,从而方便其他程序和脚本导入并使用(也能避免函数名和变量名冲突)
Python中,一个扩展名为.py的文件就称为一个模块(一个模块可以含有多个函数)
模块可以提高代码的可维护性(拆分为多个文件);提高代码可重用性(其他地方需要的时候导入即可)
一、自定义模块:可规范代码,让代码更易阅读;方便其他程序员使用已编好的代码,提高开发效率
创建模块:将相关代码(变量和函数定义等)编写在一个单独文件中,并将文件命名为:模块名.py
使用import导入模块:使用模块需先模块的形式加载模块中的代码
import modulename [as alias]
modulename:为要导入模块的名字
[as alias]:为给模块起的别名(通过别名也能使用该模块)
在使用模块中的变量、函数时或者类时,需在变量名、函数名或类名前添加“模块名.”做前缀;import语句可以一次导入多个模块(使用“,”隔开)
eg:import bmi #导入bmi模块
bmi.fun_bmi("张三",1.75,120) #执行模块中的fun_bmi()函数
eg:import bmi as m #导入bmi模块并命名别为为m
m.fun_bmi("张三",1.75,120) #执行模块中的fun_bmi()函数
使用from … import语句导入模块:
该语句导入模块,不需要再添加前缀,直接通过具体的变量、函数和类名等访问即可(import直接导入时,每一条import语句都会创建一个新的命名空间(namespace),且在该命名空间中执行与.py文件相关的所有语句,在执行时,需在具体的变量、函数和类名前加上“模块名.”)
命名空间可以理解为记录对象名字和对象之间对应关系的空间(Python的命名空间大都是通过字典(dict)实现,key是标识符,value是具体对象)
from modelname import member
modelname:模块名称,区分大小写,需和定义模块时设置的模块名称大小写一致
member:用于指定要导入的变量、函数名或类等(多个时用“,”隔开,全部导入可使用通配符“*”代替,要查看导入了哪些定义,可以使用dir()的值来查看:print(dir()))
from bmi import fun_bmi #导入bmi模块的fun_bmi函数
from bmi import fun_bmi,fun_bmi_upgrade #导入bmi中的……函数
from bmi import * #导入bmi中的所有函数
使用from … import … 语句时,需要保证所有导入的内容在当前命名空间中是唯一的,否则将会出现冲突,后导入的同名变量、函数或类会覆盖先导入的
模块搜索目录:导入模块时的查找顺序:
- 当前目录(执行的Python脚本所在目录)下查找
- 到PYTHONPATH(环境变量)下的每个目录中查找
- 到Python的默认安装目录下查找(这些目录的具体位置保存在标准模块sys的sys.path变量中,可以通过以下代母输出具体目录)
import sys #导入标准模块sys
print(sys.path) #输出具体目录
import语句导入模块时,模块名区分大小写。以下3种方式添加指定目录到sys.path:
临时添加:在导入模块的Python文件中添加(只在当前操作下生效)
import sys #导入标准模块sys
sys.path.append('E:/program/Python/Code/demo') #增加目录路径
增加.pth文件(推荐):该方法只在当前版本的Python有效
在安装目录下\Python37\Lib\site-packages中,新建.pth文件,使用记事本打开,写要导入的路径即可(注释以#号开头)
在PYTHONPATH环境变量中添加:
配置环境变量:系统属性→高级系统设置→高级→环境变量→系统变量中新建→
变量名:PYTHONPATH,变量值中输入路径即可
二、Python中的包:包含__init__.py(该文件可以是空文件,可以写一些初始化代码)文件的文件夹
可以避免模块名重名引发的冲突,规范代码(把功能相近的模块组织到一个目录下)
Python程序的包结构:
一个项目可能有多个包放在项目文件夹下,每个包文件夹中必须含有__init__.py文件,再在该目录下创建其他模块,在包外面有一个主程序
创建和使用包:
创建包:先建包名称(文件夹),再在该文件夹下创建__init__.py文件(该文件里面可以为空,如果有代码,则在导入包时会自动执行),然后创建其他模块
(__init__.py文件是一个模块文件,模块名为对应的包名)
使用包:
1、import + 完整包名 + 模块名
import settings.size #导入时因主程序和模块不在同一文件夹,需要添加包名
print(settings.size.width) #输出同样要加包名(settings)
2、from + 完整包名 +import + 模块名
from settings import size
print(size.width)
3、from + 完整包名 + .模块名 + import + 定义名(导入全部定义可以用*代替)
from settings.size import width,height #导入模块size中的width和height
print(width)
以主程序的形式执行:Python没有程序入口(Java和c++等都有)
if __name__ == '__main__': #以主程序运行
__name__:记录模块名称的变量
'__main__':如果程序被导入到其他程序中,这里就表示该模块的名称
三、引用模块
导入和使用标准模块:
标准模块也叫标准库,是Python自带的非常实用的模块,可直接使用import导入
eg:import random #导入生成随机数的模块
number = random.randint(0,10) #生成一个0-10的随机整数
print(number)
eg:import random # 导入标准模块中的random
if __name__=='__main__':
checkcode = "" # 保存验证码的变量
for i in range(4): # 循环4次
index =random.randrange(0,4)
# 生成0~3中的一个数(用于判断获取的值是字母还是数字)
if index != i and index+1 != i:
checkcode += chr(random.randint(97,122)) # 生成a~z中的一个小写字母
elif index+1 == i:
checkcode += chr(random.randint(65,90)) # 生成A~Z中的一个大写字母
else:
checkcode += str(random.randint(1,9)) # 生成1~9中的一个数字
print("验证码:",checkcode) # 输出生成的验证码
第三方模块的下载和安装:安装好后就可以像标准模块一样使用
可以访问最新网站:https://pypi.org去查找库
命令:pip <command> [modulename] #cmd中直接使用
command参数:install:安装模块;uninstall:卸载第三方模块;list:显示第三方模块
modulename:用于指定要安装或卸载的模块名
导入模块一般先导入标准模块,再导入第三方模块,然后导入自定义模块