模块与包
模块的作用
按功能点分割 文件、目录
python中的模块和包
在python中,代码是放在py为扩展名文件中的,一个.py文件就称之为一个模块(Module)
又可以把许多模块按照功能放到不同的目录中来组织模块
这些组织存放模块文件的目录,我们称之为包(package)
模块化的好处
以库形式封存功能,方便给别的代码调用
库其实就是模块和包
可以使用自己写的库,python标准库,第三方库
避免变量名冲突(包括函数名)
如果一个代码文件特别的大,变量的名字容易发生重复
需要想出不同的变量名或者函数名
如果采用模块分割代码,每个模块文件代码都不是很多,就可以大大的缓解这个问题
每个模块中的变量名作用域只在本模块中
自定义模块
模块的定义
所谓模块其实就是一个py文件,定义模块就是创建py文件
以前我们创建的py文件就都是一个模块
模块名就是py文件名(不包括.py)比如 test.py
模块的标识符(identifier)可以包含供外部使用
变量(一些常量,比如配置项)
函数(供其它模块调用)
类
配置项通常大写
一个例子
calc.py里面有函数calc_s_c可以计算参数的平方和立方
我们就有了一个模块calc
var1 = 20
def calc_s(num):
print ('square of num is %s' %num**2)
def calc_c(num):
print ('cube of num is %s' %num**3)
def calc_s_c(num):
print ('square of num is %s' % num**2)
print ('cube of num is %s' % num**3)
使用calc模块里面的方法一
import module
import module1,module2,module3
可以调用模块里面所有的变量
import calc
calc.calc_s_c(20)
calc.calc_s(10)
print (calc.var1)
别名
import module as newname
长名字缩短
防止同名(苦A里面有until,库B里面也有Util)
import calc as c
c.calc_s_c(20)
c.calc_s(10)
print (c.var1)
使用calc模块里面的方法二
from module import var
from calc import calc_s_c
calc_s_c(20)
from module import var1,var2
from calc import calc_s_c,var1
calc_s_c(20)
print (var1)
方法二优缺点
可以少输入前缀
一般用在大量调用的情况下,少输入一些字符
但是如果代码新增调用,需要修改import语句
别名
from module import var as newname
长名字缩短
防止同名
from calc import calc_s_c as csc
csc(20)
全部导入
from module import *
form calc import *
calc_s_c(20)
print (var1)
一般不建议使用
潜在的污染名字空间危险
from m1 import calc
from m2 import * 若m2里面也有calc,会覆盖m1里的calc
自定义包
什么是包
将功能相关的模块放到相应的目录结构中来组织模块。
这些组织存放模块文件的目录,我们称之为包(Package)
包的结构
Phone/
__init__.py 前后两个下划线,初始化文件,包的初始化文件,如果没有需要,可以为空文件
common_util.py
Voicedta/
__init__.py
Pots.py
Isdn.py
Fax/
__init__.py
G3.py
Mobile/
__init__.py
Analog.py
Digital.py
顶层的包 Phone
子包 Voiceata、Fax、Mobile
包初始化文件 __init__.py
可以是空文件
也可以包含初始化操作
特殊用法:定义 __all__=[]
from package XX import *时,
告诉解释器包含它的目录是一个Python:python3.3+
包里面的各个模块文件
调用包内模块的方法
方法一
import Phone.Mobile.Analog
Phone.Mobile.Analog.dial()
方法二
from Phone.Mobile import Analog
Analog.dial()
方法三
from Phone.Mobile.Analog import dial
dial()
模块与包-库的使用
使用标准库
标准库
Python安装包里面提供的功能模块和包
主要包括
内置类型和函数
比如len、int、open等
直接使用,无需import
功能模块
包含程序设计所需的常用的功能
需要用import导入它们就可使用
根据Python文档查看使用细节
例一
需要获取系统当前时间,只需要导入时间库time
import time
time.strftime("%Y_%m_%d %H:%M:%S")
例二
调用外部的计算器程序,只需要导入OS操作库OS
import os
os.system("calc")
Python的标准库非常丰富,使用搜索引擎 搜索一下即可
最好是google,英文搜索
比如 模拟http请求
模块搜索规则
问题
import 或者from...import 时,解释器如何找到模块文件的?
解释器程序直接包含的,无需寻找
比如sys(sys.builtin_module_names)
sys.path
>>>import sys
>>>sys.path
sys.path的值
sys.path的值是怎么来的?
自动加入启动脚本所在的目录
自动加入标准库目录 (D:\\tools\\Python36开头的)
PYTHONPATH环境变量里包含的目录。这是一个环境变量设置,如果没有设置则忽略。该环境变量设置和PATH环境变量的设置方法类似
标准库模块、第三方模块
一般都安装在lib或者lib/site-packages目录
可以搜索到,无需我们操心
自定义的模块
一般当前的项目根目录是当前工作目录
根据路径依次指明即可 import Phone.Mobile.Digital
如果不在当前工作目录
可以加到PATHONPATH set PYTHONPATH 只对当前工作目录有效,重新打开一个shell无效 ;run.bat文件(内容:set PYTHONPATH python python文件)
也可以直接写入sys.path中 sys.path.append(‘d:\\ \\ \\’) \\表示不转义或者sys.path.append(r'd:\ \ \')
安装第三方库
开发者是全世界的程序员
第三方库和标准库的区别:不是解释器安装后内置的
安装好以后,其导入使用的方式和内置库、自己开发的库没有任何区别
安装方式
下载,拷贝到项目工程目录下面
官方源PyPI(Python Package Index)官方可以使用Pip安装,类似yum、apt-get、apm
Pip使用
Pip在新版的Python解释器安装好后就有了
命令格式 pip install <第三方库名称>,pip执行文件在环境变量中
例子 pip install Django
有时可以使用国内豆瓣的源 pip install Django -i https://pypi.douban.com/simple/
卸载命令 pip unistall Django
指定版本
pip install SomePackage==1.0.4 #specific version
pip install ‘SomePackage >=1.0.4’ #minmum version
更新安装 pip install selenium -U
导入内容是模块会使用模块里面的内容,导入内容是目录会使用init文件
python -m 表示执行一个模块,模块寻找:sys.path