您的“关注”和“点赞”,是信任,是认可,是支持,是动力…
如意见相佐,可留言。
本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新。
文章目录
1 Python 模块
1.1 Python 模块概述
模块(Modules)具体指的是一个包含所有你定义的函数和变量的文件,其后缀名是.py
。
简单理解,模块就是 Python 程序,换句话说,任何 Python 程序都可以作为模块。
模块是对代码更高级的封装,即把能够实现某一特定功能的代码编写在同一个 .py
文件中,并将其作为一个独立的模块,这样既可以方便其它程序或脚本导入和使用,同时还能有效避免函数名和变量名发生冲突。
Python 提供了强大的模块支持,不仅 Python 标准库中包含了大量的模块(称为标准模块),还有大量的第三方模块,开发者还可以自定义模块。通过这些强大的模块可以极大地提高开发者的开发效率。
1.2 查看模块
(1)查看 Python 所有内置模块
官网文档《The Python Standard Library》中可查看 Python 所有内置模块,每个模块都有介绍。
链接地址如下所示:
https://docs.python.org/3.6/library/index.html
(2)查看 Python 所有已安装模块
方法一:启动cmd.exe
,输入 pip list
命令,回车。
- 第一步,可以用快捷键
win + R
弹出运行
对话框,输入cmd
,按回车,进入cmd.exe
启动界面(命令行窗口)。如下图所示,
- 第二步,在命令行窗口输入
pip list
命令,按回车键即可。如下图所示,
也有人可能会在执行完pip list
命令之后,会有一个警告,不用在意,那是在提醒你有更高的 pip 版本,可以通过命令升级的,如需升级,升级即可。如下图所示:
方法二:运行以下 Python 代码
from pip._internal.utils.misc import get_installed_distributions
installed_packages = get_installed_distributions()
installed_packages_list = sorted(["%s==%s" % (i.key, i.version) for i in installed_packages])
print(installed_packages_list)
运行结果:
['altgraph==0.17', 'future==0.18.2', 'pefile==2019.4.18', 'pip==20.1.1', 'pyinstaller==3.6', 'pywin32-ctypes==0.2.0', 'setuptools==41.2.0']
(3)查看 Python 单独一个模块的信息
方法一:在 CMD 中输入 python -m pydoc 模块名
,回车
以 pip
模块为例,如下图所示,
方法二:在 Python 交互解释器中使用 help('模块名')
(4)查看模块的源文件路径
通过 __file__
属性可以查找到模块(或包)文件所在的具体存储位置(绝对路径)。
注意:并不是所有模块都提供了 __file__
属性,因为并不是所有模块的实现都采用 Python 语言。
以 random
模块为例,举例如下所示:
import random
print(random.__file__)
运行结果:
D:\Data\Tools\Python382\lib\random.py
2 Python 模块的导入
2.1 Python 模块导入概述
使用 Python 进行编程时,有些功能没必要自己实现,可以借助 Python 现有的标准库或者其他人提供的第三方库。
Python 模块可以被别的程序引入,使用该模块中的函数等功能。
可以使用 import 语句导入 Python 模块,import 具体用法有以下两种,使用语法格式如下所示:
第一种,
import 模块名1 [as 别名1], 模块名2 [as 别名2],…
对以上格式说明,
- 用中括号
[]
括起来的部分,可有可无。 - 使用这种语法格式的 import 语句,会导入指定模块中的所有成员(包括变量、函数、类等)。
- 当需要使用模块中的成员(包括变量、函数、类等)时,需用该模块名(或别名)作为前缀,例如
模块名.变量
或别名.变量
,否则 Python 解释器会报错。
第二种,
from 模块名 import 成员名1 [as 别名1],成员名2 [as 别名2],…
- 用中括号
[]
括起来的部分,可有可无。 - 使用这种语法格式的 import 语句,只会导入模块中指定的成员,而不是全部成员。
- 当程序中使用该成员时,无需附加任何前缀,直接使用成员名(或别名)即可。
- 也可以导入指定模块中的所有成员,即使用
form 模块名 import *
,但此方式不推荐使用。
2.2 第一种:import 模块名1 [as 别名1], 模块名2 [as 别名2],…
(1)import 模块名
使用这种方式导入模块,在使用模块内的成员时,必须添加模块名作为前缀。
以 random
模块为例,举例如下所示:
import random # 导入 random 模块
# 使用 random 模块中的方法。使用这种方式导入模块,在使用模块内的成员时,必须添加模块名作为前缀。
res = random.choice(['温文尔雅型', '文静可爱型', '小鸟依人型']) # 随机在序列中选一个值
print(res)
运行结果:
温文尔雅型
(2)import 模块名 as 别名
导入整个模块时,也可以为模块指定别名,使用模块内的成员时,必须用别名作为前缀。
以 random
模块为例,举例如下所示:
import random as r # 导入 random 模块并起别名为 r
# 使用 random 模块中的方法
res = r.choice(['温文尔雅型', '文静可爱型', '小鸟依人型']) # 随机在序列中选一个值
print(res)
运行结果:
文静可爱型
(3)import 模块名1, 模块名2,…
可以一次导入多个模块,多个模块之间用逗号隔开,使用模块内的成员时,必须添加模块名作为前缀。。
以 random 模块和 math 模块为例,举例如下所示:
import random, math
# 调用 random 模块中的方法
res = random.choice(['温文尔雅型', '文静可爱型', '小鸟依人型']) # 随机在序列中选一个值
print(res)
# 调用 math 模块中的 常量 π
print(math.pi) # 打印出 pi 值
运行结果:
文静可爱型
3.141592653589793
(4)import 模块名1 as 别名1, 模块名2 as 别名2,…
在导入多个模块的同时,也可以为模块指定别名,使用模块内的成员时,必须用别名作为前缀。
以 random 模块和 math 模块为例,举例如下所示:
import random as r, math as m
# 调用 random 模块中的方法
res = r.choice(['温文尔雅型', '文静可爱型', '小鸟依人型']) # 随机在序列中选一个值
print(res)
# 调用 math 模块中的 常量 π
print(m.pi) # 打印出 pi 值
运行结果:
温文尔雅型
3.141592653589793
2.3 第二种:from 模块名 import 成员名1 [as 别名1],成员名2 [as 别名2],…
(1)from 模块名 import 成员名
使用 from 模块名 import 成员名
导入指定成员,即可在程序中直接使用成员,无须使用任何前缀。
以 random
模块为例,举例如下所示:
from random import choice
# 调用 random 模块中的方法
res = choice(['温文尔雅型', '文静可爱型', '小鸟依人型']) # 随机在序列中选一个值
print(res)
运行结果:
小鸟依人型
(2)from 模块名 import 成员名 as 别名
导入模块成员时,也可以为成员指定别名,在使用模块成员时,必须使用成员别名。
以 random
模块为例,举例如下所示:
from random import choice as c
# 调用 random 模块中的方法
res = c(['温文尔雅型', '文静可爱型', '小鸟依人型']) # 随机在序列中选一个值
print(res)
运行结果:
温文尔雅型
(3)from 模块名 import 成员名1,成员名2,…
form...import
导入模块成员时,支持一次导入多个成员,成员之间用逗号 ,
隔开。
以 random
模块为例,举例如下所示:
from random import choice, random
# 调用 random 模块中的成员
res = choice(['温文尔雅型', '文静可爱型', '小鸟依人型']) # 随机在序列中选一个值
print(res)
print(random()) # 返回 [0.0, 1.0) 范围内的下一个随机浮点数。
运行结果:
小鸟依人型
0.13676171002469606
(4)from 模块名 import 成员名1 as 别名1,成员名2 as 别名2,…
一次导入多个模块成员时,也可指定别名,同样使用 as 关键字为成员指定别名,在使用模块成员时,必须使用成员别名。
以 random
模块为例,举例如下所示:
from random import choice as c, random as r
# 调用 random 模块中的成员
res = c(['温文尔雅型', '文静可爱型', '小鸟依人型']) # 随机在序列中选一个值
print(res)
print(r()) # 返回 [0.0, 1.0) 范围内的下一个随机浮点数。
运行结果:
温文尔雅型
0.9621376861130995
(5)from 模块名 import *
可以使用 from 模块名 import *
语法格式,一次导入指定模块内的所有成员。
注意:一般不推荐使用 from 模块名 import *
这种语法导入指定模块内的所有成员,因为它存在潜在的风险。例如,同时导入两个模块的所有成员,如果要调用的成员在两个模块中都存在,那么就没法确定调用哪个模块里的成员了。
以 random
模块为例,举例如下所示:
from random import *
# 调用 random 模块中的成员
res = choice(['温文尔雅型', '文静可爱型', '小鸟依人型']) # 随机在序列中选一个值
print(res)
print(random()) # 返回 [0.0, 1.0) 范围内的下一个随机浮点数。
运行结果:
温文尔雅型
0.144144127397833
3 Python 自定义模块
3.1 自定义模块
模块是对代码更高级的封装,即把能够实现某一特定功能的代码(Python 程序)编写在同一个 .py
文件中,并将其作为一个独立的模块,这样既可以方便其它程序或脚本导入和使用,同时还能有效避免函数名和变量名发生冲突。
那么自定义模块,就很简单了,把能够实现某一特定功能的代码(Python 程序)编写在同一个 .py
文件中就完事儿了。
举例如下所示:
例一,定义两个方法,放在demo.py
文件中,作为一个独立的模块。一个简单的模块就创建好了。
在其他 .py
文件(模块)中就可以导入使用了,请看例二所示。
注意:在使用 import 语句导入时,只需要使用该模块文件的名称即可。
def info():
print('昵称:码农阿杰')
def say():
print('博客园: https://www.cnblogs.com/manongajie/')
# 测试代码。只会在当前模块运行时执行,其他模块导入当前模块运行时,不会执行此块代码。
if __name__ == '__main__':
info()
say()
运行结果:
昵称:码农阿杰
博客园: https://www.cnblogs.com/manongajie/
例二,创建一个新的 Python 文件 test.py
,在其中导入例一模块 demo.py
。
注意:在使用 import 语句导入时,只需要使用该模块文件的名称即可。
import demo
demo.info()
demo.say()
运行结果:
昵称:码农阿杰
博客园: https://www.cnblogs.com/manongajie/
3.2 Python 内置 __name__
变量和顶层脚本环境 __main__
__name__
就是标识模块名字的一个系统变量。具体有以下两种情况:
- 在 Python 中,有很多模块,每个模块都有自己的
__name__
变量,每个模块也是可以作为脚本独立运行的,当一个模块作为脚本独立运行时,它的__name__
变量就等于'__main__'
('__main__'
是顶层代码执行的作用域的名称,新手可以不去深究它,把它当作一个值去理解就好了),即__name__ = '__main__'
,而不是模块名(举例模块名为:demo)。如下面例一所示。 - 如果一个模块被调用,那么它的
__name__
变量就等于模块名'demo'
(举例模块名为:demo),即__name__ = 'demo'
,而不是'__main__'
。如下面例二所示。
举例如下所示:
例一,demo
模块(文件名为:demo.py)中的代码如下所示:
# 当前 demo 模块作为脚本独立运行,打印 __name__ 的值
print('__name__ =', __name__)
运行结果:
__name__ = __main__
例二,在 test
模块(文件名为:test.py)中调用例一中的 demo
模块,运行 test
模块
import demo # 导入 demo 模块
运行结果:
__name__ = demo
3.3 为自定义模块编写说明文档
自定义模块可以添加说明文档,只需要在模块开头的位置定义一个字符串即可。
举例如下所示:
例一,
为 demo
(文件名为:demo.py)模块添加说明文档
# 当前 demo 模块作为脚本独立运行,打印 __name__ 的值
"""
当前模块为自定义 demo 模块
"""
print('__name__ =', __name__)
例二,
在 test
(文件名为:test.py)模块中调用 demo
模块,并用模块的 __doc__
属性来访问 demo
模块的说明文档。
import demo
print(demo.__doc__)
运行结果:
__name__ = demo
当前模块为自定义 demo 模块