Python 模块详解 [模块概述][查看模块的方式][导入模块的方式][自定义模块][__name__ 变量][Python __main__][__doc__ 属性][__file__ 属性]

您的“关注”和“点赞”,是信任,是认可,是支持,是动力…

如意见相佐,可留言。
本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新。

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 模块

【友情链接】

微信公众号:码农阿杰

博客园

【参考资料】

Python 官网

Python 3.8.2 documentation

猜你喜欢

转载自blog.csdn.net/manongajie/article/details/106366088