首页 > 其他分享 >18. 模块

18. 模块

时间:2024-10-18 17:59:53浏览次数:6  
标签:__ Python 18 模块 path print import

一、什么是模块

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

二、模块的创建

  在 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 的目录;

标签:__,Python,18,模块,path,print,import
From: https://www.cnblogs.com/FlurryHeart/p/18474798

相关文章

  • JCO发表加州大学团队最新医学AI研究,从常规HE染色切片预测同源重组缺陷和铂类药物反应|
    小罗碎碎念这篇文章是关于一项名为DeepHRD的深度学习平台的研究,该平台能够从常规的苏木精-伊红(H&E)染色组织切片中预测同源重组缺陷(HRD)和铂类药物反应。作者角色姓名单位第一作者ErikN.Bergstrom加州大学圣地亚哥分校Moores癌症中心通讯作者LudmilB.Alexandrov加州......
  • 基于51单片机的大气压强检测仪(BMP180)(程序+Proteus仿真)
    编号:60基于51单片机的大气压强检测仪(BMP180)功能描述:   本设计由51单片机+BMP180大气压强检测模块+1602液晶显示模块组成。1、主控制器是51单片机2、利用BMP180传感器读取大气压强、温度、海拔高度等信息3、1602液晶显示大气压强、温度、海拔高度等信息视频演示链......
  • 2024.10.18 test
    B\(n\)次操作,每次操作选择下面三个中的一个:令\(P\getsP+x_i+S\);\(S\getsS+y_i\);\(D\getsD+z_i\)。在每次操作后,\(S\getsS+D\)。询问\(P\)的最大值。\(n\le80,x,y,z\le1e9\)。由于不可能把\(P,S,D\)存进状态里,考虑拆贡献,即计算每个操作对后面的贡献。\(D\getsD+z_......
  • [ARC185A] mod M Game 2
    [ARC185A]modMGame2题意Alice和Bob每人手里有\(n\)张牌,牌上有数字\(1,2,\cdots,n\),从Alice开始轮流出牌,若一个人出牌后场上牌数字的总和能被\(m\)整除,则这个人输掉,若两人的牌都出完后还没有人输,则Alice获胜。给出\(n,m\pod{n<m}\),问两人都进行最优操作后谁会......
  • 20241018打卡
    Simai是一种用于绘制maimaiDX谱面的脚本语言,主要用于定义游戏中的音符位置、类型和时间,使玩家能够在触摸屏上按照音乐节奏进行操作。这种语言广泛用于创建自定义谱面,为maimaiDX提供独特的挑战和体验。Simai语言的基本语法:文件头和元数据:通常在脚本开头定义一些元数据,......
  • 10.18 Linux命令(续)
    39、tar包(1)tar-cvf打包格式:tar-cvf压缩包文件1、文件2,文件3等案例:tar-cvfabc.taraabbccc打包v显示打包进度f指定文件x解包(2)解压tar-xvf格式:tar-xvf压缩包名解压tar.gz包打包:tar-zcvf压缩包名.tar.gz......
  • 10.18
    (填空题)设计者完成任务分析并识别出任务对象和动作时,可以采用()、直接操纵、表格填充、命令语言、()交互风格。我的答案:10分(1)自然语言(2)菜单选择正确答案:(1)自然语言(2)菜单选择(填空题)功能菜单采用()组织程序的多个功能,是用户交互的一种重要形式。我的答案:10分(......
  • 2024.10.18(周五)
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="utf-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=......
  • 《代码大全》阅读笔记3(2024.10.18)
    在阅读《代码大全》第7-10章后,我深刻体会到了软件开发中代码质量的重要性以及在实际开发过程中应遵循的最佳实践。第7章强调了代码的结构与可读性。一个清晰、模块化的代码不仅能提高团队的协作效率,还能帮助开发者更快地理解和修改代码。良好的命名规范是提升可读性的关键。变量......
  • python+flask框架的高校计算机服务微信小程序设计与开发小程序18(开题+程序+论文) 计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着移动互联网技术的迅猛发展,微信小程序作为一种轻量级的应用形式,已广泛应用于各行各业。高校作为教育和科研的重要场所,其计算机服务需求......