Python 基础(十五):模块

news2024/11/15 7:28:52

❤️ 博客主页:水滴技术
🌸 订阅专栏:Python 入门核心技术
🚀 支持水滴:点赞👍 + 收藏⭐ + 留言💬

文章目录

  • 一、什么是模块
  • 二、自定义模块
  • 三、引用其它模块
    • 3.1、使用 `import` 引用模块
    • 3.2、使用 `from...import` 引用模块
    • 3.3、查看导入了哪些定义
    • 3.4、该选择哪种方式引入模块呢?
  • 四、模块的搜索路径
    • 4.1、临时添加
    • 4.2、增加 `.pth` 文件(推荐)
    • 4.3、在 `PYTHONPATH` 环境变量中添加
  • 系列文章
  • 热门专栏


大家好,我是水滴~~

本篇主要讲述 Python 中的模块,主要内容有:模块的概念、自定义模块、如何引用其它模块、以及模块的搜索路径。

一、什么是模块

在 Python 中,一个模块(Module)就是一个 Python 文件,以 .py 结尾,它可以定义变量、函数、类和可执行语句等。

通常情况,我们会把能够实现某一特定功能或一系列相关功能的代码,放到一个模块中,从而方便其他程序或脚本导入并使用,提高了代码的复用性。

Python 有很多自带的模块,称为标准库,通过它们可以实现很多常见的功能。例如:sysdatetimeoslogging 等。

Python 还具有非常丰富的第三方模块,称为第三方库,通过它们可以实现很多特色的功能。例如:requestsseleniumPyPDF2matplotlibDjango 等。

二、自定义模块

自定义模块首先要创建一个 Python 文件,文件命名为:模块名 + .py,其中模块名不能使用 Python 自带模块的名称。

下面我们 使用 IDLE 来创建一个模块:在 IDLE 菜单中选择【File】-【New File】,即可打开编辑窗口,在编辑窗口中编写模块的内容(下面模块中,实现了“加法”和“减法”两个函数)。
在这里插入图片描述

保存时,文件名即为模块名,下图将模块保存至 D:\IDLEProjects 目录中,模块名为 maths.py

在这里插入图片描述
这样,一个模块就创建好了。

三、引用其它模块

上面我们自定义了一个模块 maths.py,那么我们该如何使用它呢?要使用它,首先就是引用它,即将模块加载到要使用的模块中。Python 有两个方式来引用模块:

3.1、使用 import 引用模块

import 可以引用模块,它的语法为:import module_name [as alias],其中 module_name 为要引入的模块名,还可以通过 as 来指定一个别名。

我们在相同的目录中创建一个 tests.py 模块,并通过 import 来引入自定义的 maths 模块,下面就可以通过这个模块名来调用它的函数了,如下图:

在这里插入图片描述
执行该代码,输出结果如下图:
在这里插入图片描述
如果使用了别名,那么在使用的时候,就用别名来调用模块中的函数:

import maths as m

print(m.add(3, 1))
print(m.sub(3, 1))

3.2、使用 from...import 引用模块

前面使用 import 语句引入模块,必须使用模块名来调用对应的函数或变量,而 from...import 就不一样了,下面一起来看下。

使用 from...import 来引入模块,它的语法为:from model_name import member [, member],其中 model_name 为模块名称;member 为模块中的变量、函数或类,也可以导入多个定义,中间使用逗号 , 隔开即可,如果导入全部定义,使用星号 * 代替。

使用 from...import 引入模块后,就可以不用加模块名,直接调用其中的函数了,如下图:

在这里插入图片描述
执行该代码,输出结果如下图:
在这里插入图片描述

下面代码引入 maths 模块中所有定义:

from maths import *

print(add(3, 1))
print(sub(3, 1))

3.3、查看导入了哪些定义

上面使用 from maths import * 引入模块,就不知道引入了哪些定义。其实我们可以通过 Python 自带的函数 dir() 来查看当前模块导入了哪些定义,如:

from maths import *

print(dir())

输出结果:

['__annotations__', '__builtins__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'add', 'sub']

从输出结果可以看出,不但有模块自有的定义,还包含引入的 maths 模块中的两个函数。

3.4、该选择哪种方式引入模块呢?

上面介绍的两个引入模块的方式,我们该如何选择呢?

使用 from maths import * 的好处是不用指定模块,就可以直接调用其中的定义。但如果导入多个模块,其中的函数名相同时,那么后引入的模块会覆盖之前相同的函数,这种情况下就只能使用 import 引入模块了。

四、模块的搜索路径

上面例子中,maths.pytests.py 模块在同一个目录下,所以可以引用。如果放在不同模块,还能引用吗?显然是不行的,因为模块引用时,是按照搜索路径来的。

可以使用 sys 模块的 path 变量来查看搜索路径:

import sys

print(sys.path)

输出结果:

['D:\\IDLEProjects', 'D:\\Python\\Python311\\Lib\\idlelib', 'D:\\Python\\Python311\\python311.zip', 'D:\\Python\\Python311\\Lib', 'D:\\Python\\Python311\\DLLs', 'D:\\Python\\Python311', 'D:\\Python\\Python311\\Lib\\site-packages']

第一个为当前模块的目录,其他为 Python 默认安装路径下的一些目录。

当然,我们也可以通过一些配置来引用不同目录下的模块,下面是三种方法:

4.1、临时添加

可以在模块中使用 sys.path.append() 方法临时添加一个目录。

import sys

sys.path.append('E:\temp')

该方式只对当前模块生效。

4.2、增加 .pth 文件(推荐)

在 Python 的安装目录中,找到 Lib\site-packages 目录(我的目录为:D:\Python\Python311\Lib\site-packages),在该目录中添加一个 .pth 文件,文件名没有要求,内容为要添加的目录。

这种方式对当前 Python 版本生效,也是我们推荐的一种方式。

4.3、在 PYTHONPATH 环境变量中添加

还可以通过操作系统的环境变量来添加,增加一个系统变量 PYTHONPATH,值为要添加的目录即可。

这种方式会对当前操作系统中,安装的所有 Python 版本生效。


系列文章

🔥 Python 基础(一):初识 Python
🔥 Python 基础(二):搭建 Python 开发环境
🔥 Python 基础(三):Python 集成开发工具 IDLE
🔥 Python 基础(四):基础语法
🔥 Python 基础(五):变量与常量
🔥 Python 基础(六):基本数据类型
🔥 Python 基础(七):常用运算符
🔥 Python 基础(八):流程控制语句
🔥 Python 基础(九):列表
🔥 Python 基础(十):元组
🔥 Python 基础(十一):集合
🔥 Python 基础(十二):字典
🔥 Python 基础(十三):函数
🔥 Python 基础(十四):类和对象

热门专栏

👍 《Python入门核心技术》
👍 《IDEA 教程:从入门到精通》
👍 《Java 教程:从入门到精通》
👍 《MySQL 教程:从入门到精通》
👍 《大数据核心技术从入门到精通》

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

揭秘Java 8的新特性:Stream API的使用和实践

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 1. 集合处理数据的弊端 2. Stream流式思想概述…

VN8911/VN8912(A)/VN8914/VN8910(A)上安装驱动

问题: 如何在 VN8911、VN8912(A) 或 VN8914 设备上安装驱动程序? 背景: VN8911、VN8912(A) 或 VN8914 设备 [下面概括为 VN8900 系列,不包括 VN8910(A)] 与 CANoe 一起使用时作为分布式实时系统运行 [参见下面的 CANoe 11.0 和 V…

vue插槽概念解释

官方文档 https://cn.vuejs.org/guide/introduction.html 什么是插槽 在 Vue.js 中,插槽(Slots)是一项非常有效的功能,它允许我们在组件中预留一个占位符,供父组件插入自定义的内容。 具体来说,当一个组件…

Linux和Shell:开源力量与命令行之美

目录 一、概述二、Linux的简单介绍三、Shell的简单介绍四、Linux和Shell的应用领域五、Shell编程结语: 一、概述 Linux和Shell是开源世界中不可或缺的两个重要组成部分。Linux作为一种自由和开放的操作系统,以其稳定性、安全性和可定制性而备受推崇。而S…

【ProNoC】Chap.1 ProNoC生成2x2的mesh型的4核片上网络系统;实现NoC的RTL设计

【ProNoC】Chap.1 ProNoC生成2x2的mesh型的4核片上网络系统;实现NoC的RTL设计 0. NoC多核片上网络生成器ProNoCProNoC的功能实现 1. 生成一个叫做Mor1kx SoC的单个Tile(包含NI网络接口)1.1 打开ProNoC用于生成Tile的GUI界面1.2 为Tile添加时钟…

Python基础篇(四):基本数据类型的学习和示例

Python基础篇(三):基本语句的示例和说明 基本数据类型的学习和操作 1. 数值类型1.1 整数(int)1.2 浮点数(float)1.3 复数(complex) 2. 字符串类型2.1 字符串的定义2.2 转义字符2.3 多行字符串2…

Vue-几种插槽(slot)的使用

插槽(slot) 插槽在vue中是一种很常见的写法,让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式 一共有三种分类:默认插槽、具名插槽、作用域插槽,下面一一根据案例改造说明 1 基本案例 首先编写一个基本的案…

12.1 物业管理项目中的新知识点

1.RESTful 2.雪花ID 3.mybatis的动态sql 很多时候需要实现多条件查询&#xff0c;手动判断拼接sql有些麻烦 mybatis提供了一个动态sql实现多条件查询的方法 3.1 if元素 使用if元素可以根据条件来包含或排除某个SQL片段 <select id"search" resultType"Hous…

OpenCV——实验结果输出《图像金字塔》和《图像轮廓》

1.高斯金字塔 img cv2.imread(./AM.png) print(img.shape) upcv2.pyrUp(img) cv_show(up,up)#只是将图片的大小改变了,并且是2倍2倍的增长。 print (up.shape) downcv2.pyrDown(img) cv_show(down,down) print(down.shape) up_downcv2.pyrDown(up) cv_show(up_down,np.hstack…

SSMP整合案例(4) Spring Boot整合MyBatis-Plus实现分页查询

文章 SSMP整合案例(3) 创建数据层并在测试类中运行数据库增删查改操作我们编写了MyBatis-Plus以Druid为数据源的方式 做了数据库的增删查改操作 那么 下面我们继续写 分页查询 我们 先写这样一段代码 bookDao.selectPage()selectPage就是BaseMapper提供给我们的分页查询函数 但…

【Spring Cloud + RabbitMQ 实现分布式消息总线】—— 每天一点小知识

&#x1f4a7; S p r i n g C l o u d R a b b i t M Q 实现分布式消息总线 \color{#FF1493}{Spring Cloud RabbitMQ 实现分布式消息总线} SpringCloudRabbitMQ实现分布式消息总线&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; …

redis集群原理

redis是单线程&#xff0c;但是一般的作为缓存使用的话&#xff0c;redis足够了&#xff0c;因为它的读写速度太快了。 官方的一个简单测试&#xff1a; 测试完成了50个并发执行100000个请求。 设置和获取的值是一个256字节字符串。 结果:读的速度是110000次/s,写的速度是81000…

基于JAVA的高校心理咨询系统/ 基于web的高校心理咨询系统/心理咨询系统

​ 摘 要 近年来,基于网络的高校心理咨询系统已成为社会的发展趋势&#xff0c;我国对高校心理咨询非常重视&#xff0c; 高校心理咨询工作面临着严峻考验&#xff0c;而网络的普及为高校心理咨询的信息化提供了必要的条件。本文主要研究了如何设计和开发基于B/S 高校心理咨询…

[进阶]反射-认识反射、获取类

反射 反射就是&#xff1a;加载类&#xff0c;并允许以编程的方式解剖类中的各种成分&#xff08;成员变量、方法、构造器等&#xff09;。 反射学什么&#xff1f; 学习获取类的信息、操作它们 反射第一步&#xff1a;加载类&#xff0c;获取类的字节码&#xff1a;Class对…

十大基础算法

一、选择排序 过程简单描述&#xff1a; 首先&#xff0c;找到数组中最小的那个元素&#xff0c;其次&#xff0c;将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。其次&#xff0c;在剩下的元素中找到最小的元素&#xff0c;将它与数组的第二…

翻筋斗觅食策略改进海鸥优化算法

目录 一、非线性参数A策略 二、翻筋斗觅食策略 基本 SOA 有一些局限性&#xff0c;例如容易陷入局部最优值、后期收敛缓慢、勘探与开发能力不平衡等&#xff0c;在求解复杂优化问题时尤甚。为了改善基本SOA的不足&#xff0c;提出一种基于翻筋斗觅食策略的改进 SOA(SFSOA)。…

【Neo4j教程之CQL函数基本使用】

&#x1f680; Neo4j &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;C…

基于stm32单片机的ESP-01S模块(wifi模块)的使用

一、开发环境 开发板&#xff1a;野火stm32f407开发板 wifi模块&#xff1a;ESP-01S&#xff08;核心处理器 ESP8266 &#xff09;&#xff0c;固件版本&#xff08;MQTT固件&#xff09; 操作系统&#xff1a;rt-thread操作系统 二、ESP-01S模块介绍 ESP-01S 是由安信可科技开…

【已解决】Vue3使用Element-plus按需加载时消息弹框ElMessage没有样式

Vue3使用Element-plus时消息弹框ElMessage没有样式 问题描述 Element-plus在使用ElMessage消息弹框的时候没有样式&#xff0c;按照官方的按需加载的方式引入的 1、Element-plus使用了自动按需导入&#xff0c;vite.config.js配置如下&#xff1a; plugins: [vue(),AutoImpo…

【领域驱动设计专题】一文带领你透视DDD领域驱动模型的本质和设计原理分析指南(通用语言体系)

一文带领你透视DDD领域驱动模型的本质和设计原理分析指南&#xff08;通用语言体系&#xff09; 前言介绍降低沟通成本问题&#xff1a;各自建立属于自己领域/层面的语言标准解决方案1&#xff1a;专业术语转换为接地气的话术解决方案2&#xff1a;用简单的案例和背景信息进行描…