18. 模块

一、什么是模块

  模块化 指将一个完成的程序分解为一个一个小的模块。通过将模块组合,来搭建一个完整的程序。如果不采用模块化,那么所有的代码将统一保存到一个文件中。采用模块化后,将程序分别编写到多个文件中。使用模块化后,我们可以把代码进行复用,这方面后序的开发和维护。

二、模块的创建

  在 Python 中一个 .py 结尾的文件就是一个模块。要向创建一个模块,就需要创建一个 Python 文件。模块名要符合标识符的命名规范。

  创建一个 moudle.py 文件,内容如下:

if __name__ == "__main__":
    print('当前模块被作为主模块执行了')

print(__name__,"模块模块被执行了")

# 在模块中定义的变量,在引入模块后,就可以直接使用了
a = 10

# 可以在模块中定义函数
def test():
    print("我是", __name__ , "模块中的test()方法")

# 可以定义类
class Person:
    def __init__(self):
        self.name = "Sakura"

当当前文件被运行时,__name__ 等于 __main__,如果当前模块是被导入的话,则 __name__ 等于模块的名称;

三、模块的引入

3.1、使用import导入模块

  我们可以通过 import 关键字引入多个模块,多个模块之间用逗号(,)分隔。import 语句可以在程序的任意位置调用,但是一般情况下,import 语句都会统一写在程序的开头。我们可以引入同一个模块多次,但是模块的实例只会创建一个。每一个模块内部都有一个 __name__ 属性,通过这个属性可以获取模块的名字。

import 模块名1,模块名2,...

  其中,模块名就是 Python 文件的名字,不要后缀名(.py)。在使用 import 语句导入不同模块时,每执行一条 import 语句都会创建一个新的名称空间(namespace),并且在该名称空间中执行与 .py 相关的所有语句。在调用模块中的变量、函数和类名前加上 “模块名.”的前缀。

  使用 import 语句首次导入模块时,会产生该模块对应的名称空间。然后会运行该模块,将该模块运行过程中生成的名字都会丢到这个名称空间中。然后会在当前执行文件中产生一个名字,该名字指向被导入模块产生的名称空间。之后的导入,都是直接引用首次导入产生的名称空间,不会重复实现。

  创建 template.py 文件,内容如下:

import moudle

# 一个程序中只会有一个主模块,主模块就是直接通过 Python 执行的模块。
print("主模块",__name__)
print(moudle)
print(moudle.__name__)

# 访问模块中的属性
print(moudle.a)

# 访问模块中的方法
moudle.test()

# 使用模块中的类
p = moudle.Person()
print(p)
print(p.name)

  我们还可以通过 as 关键字为模块名指定别名。

import 模块名 as 别名
import moudle as test

print(test)
print(test.__name__)

命名空间可以理解为记录名字和对象之间对应关系的空间;

目前 Python 的命名空间大部分都是通过字典(dict)来实现的,其中,key 是标识符,value 是具体的对象;

3.2、使用from...import导入模块

  如果每次导入模块时都创建一个新的命名空间,而是将具体的定义导入到当前的命名空间中,这时可以使用 from...import 语句。使用 from...import 语句后,不需要再添加前缀,可以直接通过具体的变量、函数、类名等访问。

from 模块名 import 变量

  使用 from ... import 导入模块时,会产生该模块对应的名称空间。然后会运行该模块,将该模块运行过程中生成的名字都会丢到这个名称空间中。然后会在当前文件的名称空间拿到一个名字,该名字指向被导入模块中的对应成员的内存地址。

  创建 routine.py 文件,内容如下:

from moudle import Person,test

p = Person()
print(p)
print(p.name)

test()

  我们还可以通过如下方法引入模块中的所有内容:

from 模块名 import *

在通过 from 模块名 import * 导入模块中的内容时,不会引入以下划线开头的变量。

  我们还可以为引入的变量使用别名:

from 模块名 import 变量 as 别名
from moudle import test as new_test

def test():
    print("我是主模块中的test()方法")

test()
new_test()

在使用 from...import 导入模块中的定义时,需要保证所导入的内容在当前的命名空间是唯一的,否则将会出现冲突,后导入的同名变量、函数或者类会覆盖先导入的;

3.3、模块的导入规则

  在 Python 内部导入模块时,必须要遵循它的导入规则,必须去指定的目录中去找 .py 文件。我们可以通过 sys 模块中的 path 属性来查看指定的导入目录。

import sys

for item in sys.path:
    print(item)

  运行结果如下:

e:\Source\Software\Python                 # 当前文件所在的目录
D:\Pycharm\Python311\python311.zip        # Python解释器的python311.zip压缩包
D:\Pycharm\Python311\DLLs                 # Python解释器的DLLs目录
D:\Pycharm\Python311\Lib                  # Python解释器的Lib目录
D:\Pycharm\Python311                      # Python解释器的根目录
D:\Pycharm\Python311\Lib\site-packages    # Python解释器的Lib目录下的site-packages目录,第三方模块的安装目录

在 Pycharm 中运行此代码时,会自动添加当前项目的目录到 sys.path 中;

  导入文件时,都是根据 sys.path 中的目录进行 .py 文件的寻找。在导入模块前,我们可以通过 append() 方法自己添加路径。

import os
import sys

path = os.path.abspath(__file__)            # 获取当前运行文件的绝对路径
parent_path = os.path.dirname(path)         # 获取当前运行文件所在的目录
base_path = os.path.dirname(parent_path)    # 获取当前运行文件所在的目录的上一级目录

sys.path.append(parent_path)
sys.path.append(base_path)

for item in sys.path:
    print(item)

四、标准库

  为了实现开箱即用的思想,Python 为我们提供了一个模块的标准库。在这个标准库中,有很多很强大的模块我们可以直接使用,并且这个标准库会随 Python 的安装一同安装。

  对于标准库中的模块,我们可以直接使用 import 语句导入到 Python 文件中使用。

import 模块名

  Python 中提供了许多标准模块,我们可以在 Python 的帮助文档中查看。具体的方法是:打开 Python 的安装目录下的 Doc 下的 html 目录,在该目录中有一个名为 index.html 文件即为 Python 的帮助文档。

帮助文档位置

网页中模块的位置

模块

模块名 描述
sys 与 Python 解释器一起环境相关的标准库
time 提供与时间相关的各种函数的标准库
os 提供了访问操作系统服务功能的标准库
calendar 提供了与日期相关的各种函数的标准库
urllib 用来读取来自网上(服务器上)数据据的标准库
json 用于使用 JSON 序列化和反序列化对象
re 用于在字符串中执行正则表达式匹配和替换
math 提供算术运算函数的标准库
decimal 用于进行精确控制运算精度、有效数位和四舍五入操作的十进制运算
shutil 用于进行高级文件操作,如复制、移动、重命名等
logging 提供了灵活的记录事件、错误、警告和调试信息等日志信息的功能
tkinter 使用 Python 进行 GUI 编程的标准库
import sys
# pprint模块中的pprint()方法可以用来堆打印的数据做简单的格式化
import pprint

# 获取执行代码时,命令行中所包含的参数
# 该属性是一个列表,列表中保存了当前命令的所有参数
# 命令行中输入 python python文件名 参数1 参数2 ...
print(sys.argv)

# 获取当前程序中加载的所有模块
# moudules是一个字典,字典的key是模块的名字,字典的value是模块对象
pprint.pprint(sys.modules)

# 它是一个列表,列表中保存的是模块的搜索路劲
pprint.pprint(sys.path)

# 表示当前python运行的平台
print(sys.platform)

# 该函数用来退出程序
sys.exit("程序运行结束")
import os

# 通过这个属性可以获取系统的环境变量
print(os.environ,'\n')
print(os.environ["path"],'\n')

# 可以用来执行操作系统的命令
os.system("dir")

五、第三方库

  在进行 Python 程序开发时,除了可以使用 Python 内置的标准模块外,还可以使用第三方模块。对于这些第三方模块,可以在 Python 官方推出的 http://pypi.python.org/pypi 中找到。在使用第三方模块时,需要先下载并安装该模块,然后就可以像使用标准模块一样导入并使用了。下载和安装第三方模块可以使用 Python 提供的 pip 命令实现。pip 的语法格式如下:

pip <command> [moudulename]
  • command:用于指定要执行的命令。常用的参数值有 install(用于安装第三方模块)、uninstall(用于卸载已经安装的第三方模块)、list(用于显示已经安装的第三方模块)等;
  • moudulename:可选参数,用于指定要安装或卸载的模块名,当 command 为 install 和 uninstall 时不能省略。

pip 指明在命令行(cmd)中使用;

第三方库安装在 Python 解释器的下的 Lib 目录下的 site-packages 的目录;

posted @ 2024-10-18 18:01  星光映梦  阅读(8)  评论(0编辑  收藏  举报