18. 模块

news/2024/10/18 18:02:23/文章来源:https://www.cnblogs.com/FlurryHeart/p/18474798

一、什么是模块

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

二、模块的创建

  在 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 testprint(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,testp = Person()
print(p)
print(p.name)test()

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

from 模块名 import *

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

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

from 模块名 import 变量 as 别名
from moudle import test as new_testdef test():print("我是主模块中的test()方法")test()
new_test()

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

3.3、模块的导入规则

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

import sysfor 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 syspath = 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 的目录;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/816987.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

csp-s模拟12

csp-s模拟12\(T1\) T2918. 小 h 的几何 \(100pts\)对于任意三角形,均有其三条边的中点、三条高的垂足、三个顶点与垂心连线的中点,这九个点在一个圆上。观察样例可知,对于单位圆上 \(\triangle ABC\) 的三个顶点 \(A(x_{a},y_{a}),B(x_{b},y_{b}),C(x_{c},y_{c})\) ,其九点…

Android8,reactnative中webView传的token,vue中获取不到是怎么回事?

rn代码是这样的,要在vue页面获取到tokenvue中是这样写的,安卓9以上都能得到,就是8获取不到有没有大佬帮忙看看,跪谢!!!!

实时同步服务

1 实时同步应用场景通过rsync+定时任务实现定时备份/同步 对于NFS我们需要进行实时同步2 实时同步工具选型实时同步工具 特点 选型inotify工具+脚本inotify监控指定的目录,监控 目录下是否有变化,显示变化了的文件. 通过rsync服务端与客户端传送,书写脚本.不推荐,有性能问题.se…

五款免费报表工具推荐:山海鲸报表、Tableau 等优劣对比

在当今数据驱动的时代,报表工具已经成为各类企业进行决策和管理的重要工具。无论是大中型企业还是小微企业,能够快速、高效地生成可视化报表,洞察业务运营情况,已经成为提升竞争力的关键。今天为大家挑选了5款非常优秀的报表软件,并且详细分析了它们的优缺点,希望能够帮助…

DevExpress隐藏列表中显示的加号+

GridView1.OptionsDetail.EnableMasterViewMode = False

人大金仓kingbase部署

环境准备: 系统版本:CentOS Linux release 7.9.2009 (Core) 硬件配置:4C4G200G 安装包准备:KingbaseES_V008R006C008B0020_Lin64_install.iso https://www.kingbase.com.cn/xzzx/index.htmlicense准备:license_企业版.zip https://www.kingbase.com.cn/xzzx/index.htm计划…

从深海探测到海洋强国:数字孪生助力海洋装备跨越式发展

浮力调节系统作为涉及潜水的海洋设备的关键部件,能够为潜水器提供稳定悬浮的深度控制,并能根据工作深度的不同通过改变浮力来带动潜水器上浮或下潜。海洋广袤无垠,蕴藏着丰富的资源。近现代以来,人类使用各种手段探索海洋探索,广袤无垠的海洋与人类的生活越来越紧密,至少…

python - 分享绕过验证码登录的方法

一、通过webdriver启动浏览器:二、添加cookie:三、切换到目标地址: # This is a sample Python script. from selenium import webdriver import time # Press Shift+F10 to execute it or replace it with your code. # Press Double Shift to search everywhere for clas…

通义灵码上线一周年:超 600 万下载量,国内用户规模第一,新功能有奖测评

通义灵码,是基于通义大模型的 AI 研发辅助工具,包含 AI 编码助手和 AI 程序员。其中,AI 编码助手为开发者写代码、补代码、写注释、写单测、写代码优化和排查问题,是开发者的编码搭子!通义灵码,是基于通义大模型的 AI 研发辅助工具,包含 AI 编码助手和 AI 程序员。 其中…

mysql当数据库发现了慢sql怎么定位?--待验证

1、应用侧生成链路id。 使用skywalking 2、mybatis写拦截器,sql里面加入链路id `@Intercepts({ @Signature( type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class} ) }) public class SqlStatementInterceptor implements…

Echarts 关于formatter的使用

其实这个 formatter 很实用哈,可以自定义很多格式内容,尤其是提示和图例那边,还有柱状图的内容啥的 官网给的案例啊,看不懂哈哈哈 来点自己的小经验,几乎都可以实用啊,而且可以搭配rich自定义样式, 1、字符串模板 最简单的就是这样使用的,关于参数,这个官网给答案了,…

Higress 重磅更新:AI 能力全面开源,云原生能力再升级

Higress 最新的 1.4 版本基于为通义千问,以及多家云上 AGI 厂商客户提供 AI 网关的积累沉淀,开源了大量 AI 原生的网关能力。作者:澄潭、钰诚 新版本简介 Higress 最新的 1.4 版本基于为通义千问,以及多家云上 AGI 厂商客户提供 AI 网关的积累沉淀,开源了大量 AI 原生的网…