枫枫知道个人博客
首页
新闻
心情
关于
文章搜索
网站导航
项目相关
官方文档
首页
新闻
心情
关于
文章搜索
网站导航
项目相关
官方文档
登录
注册
python基础--模块和包
模块(Module) 在计算机程序的开发过程中,随着程序代码
搜索
[[ slide_text ]]
[[ item.content ]]
28
3
python基础--模块和包
发布时间:
2022-02-06
作者:
枫枫
来源:
枫枫知道个人博客
python
# 模块(Module) 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module) **使用模块有什么好处?** > 最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。 > 使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。 你也许还想到,如果不同的人编写的模块名相同怎么办?为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。 举个例子,一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py的文件就是一个名字叫xyz的模块 现在,假设我们的`abc`和`xyz`这两个模块名字与其他模块冲突了,于是我们可以通过包来组织模块,避免冲突。方法是选择一个顶层包名,比如`mycompany`,按照如下目录存放: ```Python mycompany ├─ __init__.py ├─ abc.py └─ xyz.py ``` 引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。现在,`abc.py`模块的名字就变成了`mycompany.abc`,类似的,xyz.py的模块名变成了`mycompany.xyz`。 请注意,每一个包目录下面都会有一个`__init__.py`的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。**init**.py可以是空文件,也可以有Python代码,因为`__init__.py`本身就是一个模块,而它的模块名就是`mycompany` 类似的,可以有多级目录,组成多级层次的包结构。比如如下的目录结构: ```Python mycompany ├─ web │ ├─ __init__.py │ ├─ utils.py │ └─ www.py ├─ __init__.py ├─ abc.py └─ xyz.py ``` 文件`www.py`的模块名就是`mycompany.web.www` **注意:** 自己创建模块时要注意命名,不能和Python自带的模块名称冲突。例如,系统自带了sys模块,自己的模块就不可命名为sys.py,否则将无法导入系统自带的sys模块。 ## 使用模块 自己创建模块可能还有点难,我们先结合实战案例,如何使用python的标准库 Python的标准库有: ||| |-|-| |名称|作用| |datetime|为日期和时间处理同时提供了简单和复杂的方法。| |zlib|直接支持通用的数据打包和压缩格式:zlib,gzip,bz2,zipfile,以及 tarfile| |random|提供了生成随机数的工具。| |math|为浮点运算提供了对底层C函数库的访问。| |os|提供了不少与操作系统相关联的函数。| datetime库的使用方法 ```Python from datetime import date #导入时间库 now=date.today() #取当前时间 print(now) birthday=date(1987,12,3) print(birthday) age=now-birthday #假设年龄=当前日期-生日日期 print(age) ``` 导入库的方式: 1. 使用from导入某个库中的某个函数,在使用的时候不再需要加上库名 2. 使用impor导入这个库的所有函数,在使用时,要加上库名 我们结合案例分析看看这两种有什么不一样 导入随机模块进行随机取值,第一种使用import ```Python import random num=random.random() print(num) # random.random是随机生成一个0~1之间的浮点数 ``` 第一个random是包名,不能省略的 第二种是使用from进行导入具体的函数 ```Python from random import random num=random() print(num) ``` 我们可以看到,我们就可以直接使用这个random函数了,而不再需要使用random.random ### 导入多个模块 ```Python import 模块1,模块2,模块3 ``` ### **模块改名** ```Python import random as rd num = rd.random() print(num) ``` 我们将random模块取了一个别称rd 我们在调用random模块的时候就可以使用rd进行代替 ### 模块、包与库的关系 **python模块是**: 自我包含并且有组织的代码片段为模块。 表现形式为:写的代码保存为文件。这个文件就是一个模块。[sample.py](http://sample.py) 其中文件名smaple为模块名字。 **python包是**: 包是一个有层次的文件目录结构,它定义了由n个模块或n个子包组成的python应用程序执行环境。 通俗一点:包是一个包含__init__.py 文件的目录,该目录下一定得有这个__init__.py文件和其它模块或子包。 **python库是**: 参考其它编程语言的说法,就是指python中的完成一定功能的代码集合,供用户使用的代码组合。在python中是包和模块的形式。
28
3
上一篇:Django路由分发
下一篇:Django反向解析
你觉得文章怎么样
发布评论
1282 人参与,1 条评论