假设我们的代码都写在一个py文件这时如果有上千上万条的话那么久难以维护
由此我们可以把代码按功能划分到不同的文件这些文件就是python的模块
例:
工具功能代码:tools.py
公用函数代码:common.py
第三方相关引入的代码:thirdparty.py
通过这些代码组织我们就可以简化我们的代码逻辑
有了这些我们就可以在代码里按需来引入这些模块
例:
#main.py
import tools
print(tools.say_hello())
main.py属于自身的调用模块
下一行的代码是导入自定义tools.py模块
第三行就是调用tools.py模块的函数
通过定义,引入,调用我们就在main.py这个模块里面调用了我们自己的模块
模块可以分成
官方模块 自定义模块 第三方模块
如果模块多了也难以维护
这样我们就可以把模块划分到不同的包
也就是不同的文件夹也就是python的包
python定义模块
Python语言本身提供了非常多的模块,比如数学模块math、cmath、decimal、statistics;文件模块pathlib、stat、shutil等;除了使用官方模块,有时候也需要自定义模块。
如果我们需要创建一个tools模块,用来实现众多的工具函数,那么我们可以创建一个tools.py的文件,并在这个文件里面实现一些函数,如:say_hello()函数、say_goodbye()
# tools.py
def say_hello():
print('hello')
def say_goodbye():
print('goodbye')
这样就定义了一个叫tools的模块,接着就可以使用这个模块了,在使用之前,我们需要先导入模块
Python导入模块
要使用一个模块,我们必须首先导入该模块。Python使用import语句导入一个模块,Python官方提供很多有用的模块,比如:os模块、sys模块、time模块、math模块等等。
导入官方模块,不需要考虑路径的问题,例如,导入系统自带的模块 math,直接导入即可。如果是导入自定义模块,则需要考虑路径问题,我们下节课继续学习。
导入官方模块math:
import math
导入以后,你就可以认为math是一个指向已导入模块的变量,通过该变量,我们可以访问math模块中所定义的所有公开的函数、变量和类:
# 属性:圆周率
>>> import math
>>> math.pi
3.141592653589793
# 函数:次方
>>> math.pow(2, 3)
8.0
如果希望导入模块的指定部分属性或函数,那么使用from...import...语句。
>>> from math import pi
>>> print(pi)
3.141592653589793
这个时候,由于pow()函数没有导入,所以是不能使用pow()函数的。
如果希望导入模块里面的所有内容,那么使用from ...import *语句。
>>> from math import *
>>> print(pi)
3.141592653589793
>>> pow(2, 3)
8.0
如果从一个模块导入函数,有可能会遇到导入的函数与本文件的函数冲突的情况。例如:本文件定义了一个pow()函数,同时从math模块也导入了一个pow()函数,这种情况下就会引起冲突;事实上,这种冲突的情况经常发生。
有两种方法可以解决这个问题,第一种是直接导入模块,不指定导入模块里面的具体内容;第二种方法就是使用from ... import as ...语句,as类似重命名,可以把导入的函数或属性重命名为别的名字。
>>> from math import pow as mathpow
>>> mathpow(2, 3)
8.0
python模块导入的路径
导入官方模块的时候,不需要考虑路径问题,这是因为在搜索模块的时候,会默认包含官方模块的路径,所以导入官方模块不需要考虑路径的问题。
如果需要导入自定义模块,则需要了解Python导入模块搜索的路径。
通过sys模块,可以知道导入模块的路径。
>>> import sys
>>> sys.path
['', '/data/miniconda3/lib/python3.8', '/data/miniconda3/lib/python3.8/site-packages']
它返回的是一个列表,表示的是在搜索Python模块时,会搜索的路径,在示例中,返回了四个路径。我们分析一些关键路径:
第一个路径是'',它是一个空字符串,表达的是当前路径的意思。
第二个路径是/data/miniconda3/lib/python3.8,它是Python默认模块的存放的路径,在这个路径下,可以发现有os、sys等模块的代码。
第三个路径是/data/miniconda3/lib/python3.8/site-packages,它是第三方模块代码的存放路径,在这个路径下,存放的是需要安装的第三方模块。
那如何使用我们前面定义的tools.py模块呢?
我们在tools.py同级目录,创建main.py文件:
# main.py
import tools # 导入模块
tools.say_hello() # 调用模块里面的say_hello()函数
tools.say_goodbye() # 调用模块里面的say_goodbye()函数
就可以运行了。
因为在搜索包的路径时,会搜索当前路径(上述:sys.path结果的第一项),因此在同一个目录内的tools.py模块,可以被搜索到,所以能够import进来。
python安装第三方模块的方法
尽管Python的官方模块已经提供了非常强大的能力,但是仍有大量热心开发者提供了非常好用的第三方库,在实际开发中,也会经常使用,比如Web开发框架,Django、Flask,异步任务框架:Celery等。
在安装Python的时候,Python环境提供了安装第三方模块的工具:pip,通过这个工具,可以非常快捷的安装第三方模块。
安装Django模块:
pip install django
卸载Django模块:
pip uninstall django