模块的介绍与导入
什么是模块
在计算机程序的开发过程中,随着程序代码越写越多,在一个文件中代码就会越来越长,越不容易维护。
为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。
在Python中,一个.py
文件就是一个模块(Module)。
使用模块的好处?
最大的好处是大大提高了代码的可维护性,其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。
使用模块还可以避免函数名和变量名冲突,每个模块有独立的命名空间,因此相同名字的函数和变量完全可以分别存在不同的模块中,所以,我们自己在编写模块时,不必考虑名字会与其他模块冲突。
模块的分类
模块分为三种:
- 内置模块(又称标椎模块),执行
help('modules')
可查看所有Python自带的模块 - 第三方模块
- 自定义模块
模块的导入 & 调用
import module_a # 导入
import module_a, module_b # 导入多个模块,用英文逗号分割
from module import xx # 导入模块下的某个功能(方法)
from module.xx.xx import xx as rename # 导入后重命名
from module.xx import * # 导入一个模块下的所有方法,不建议使用
module_a.xxx # 调用
注意:模块一旦被调用,即相当于调执行了另外一个py文件里的代码
自定义模块
创建一个py文件,就可以称之为模块,就可以在另外一个程序里导入
安装第三方模块
直接pip install 模块名
安装即可
什么?安装的太慢?
Python使用pip方法安装第三方包时,需要从 https://pypi.org/ 资源库中下载,但是会面临下载速度慢,甚至无法下载的尴尬,这时,你就需要配置一个国内源了
pip install 模块名 -i 镜像源url
给大家推荐几个值得拥有的国内镜像站
清华大学:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
豆瓣:http://pypi.douban.com/simple/
中国科学技术大学:http://pypi.mirrors.ustc.edu.cn/simple/
如果有报错说网站不可信任,根据提示加上--trusted-host ***
即可
这里以阿里云的镜像源为例
pip install 模块名 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
模块查找路径
一个问题,自己写的模块只能在当前路径下的程序里才能导入,换一个目录再导入自己的模块就报错找不了,这是为什么?
这与导入模块的查找路径有关
import sys
print(sys.path)
输出(注意:不同的电脑输出的可能不太一样)
['F:\\Anaconda\\lib\\site-packages\\spyder\\plugins\\help\\utils',
'C:\\Users\\Administrator',
'C:\\Users\\Administrator\\模块',
'F:\\Anaconda\\python38.zip',
'F:\\Anaconda\\DLLs', 'F:\\Anaconda\\lib',
'F:\\Anaconda',
'',
'F:\\Anaconda\\lib\\site-packages',
'F:\\Anaconda\\lib\\site-packages\\locket-0.2.1-py3.8.egg',
'F:\\Anaconda\\lib\\site-packages\\win32',
'F:\\Anaconda\\lib\\site-packages\\win32\\lib',
'F:\\Anaconda\\lib\\site-packages\\Pythonwin',
'F:\\Anaconda\\lib\\site-packages\\IPython\\extensions',
'C:\\Users\\Administrator\\.ipython',
'F:\\Anaconda\\lib\\site-packages\\astroid\\brain']
你导入一个模块时, Python解释器会按照上面列表顺序去依次到每个目录下去匹配你要导入的模块名,只要在一个目录下匹配到了该模块名,就立刻导入,不再继续往后找。
注意:列表第一个元素可能为空,即代表当前目录,所以你自己定义的模块在当前目录会被优先导入。
我们自己创建的模块若想在任何地方都能调用,那就得确保你的模块文件至少在梗块路径的查找列表中。我们一般把自己写的模块放在一个带有"site-packages"字样的目录里,我们从网上下载安装的各种第三方的模块一般都放在这个目录(在Python安装目录下,以我的电脑为例:F:\python\Lib\site-packages\)。