python 第十四章 模块和包

news2025/1/18 3:25:57

系列文章目录

第一章 初识python
第二章 变量
第三章 基础语句
第四章 字符串str
第五章 列表list []
第六章 元组tuple ( )
第七章 字典dict {}
第八章 集合set {}
第九章 常用操作
第十章 函数
第十一章 文件操作
第十二章 面向对象
第十三章 异常


文章目录

  • 系列文章目录
  • 14.1 什么是模块?
  • 14.2 导入模块
    • 方法1:import 模块名
    • 方法2:from 模块名 import 功能名
    • 方法3:from 模块名 import *
    • 方法4:import 模块名 as 别名
    • 方法5:from 模块名 import 功能名 as 别名
  • 14.3 制作模块
    • 定义模块
    • 测试和调用模块
    • 模块定位顺序
      • 名字重复的严重性
  • 14.4 all列表
  • 14.5 包
    • 制作包
    • 导入包
      • 方法一
      • 方法二


14.1 什么是模块?

Python 模块(Module),是一个 Python 文件,以.py 结尾,包含了 Python 对象定义和Python语句。模块能定义函数,类和变量,模块里也能包含可执行的代码。

在这里插入图片描述
在这里插入图片描述
lib文件夹里面,往下滚动,大量充斥着.py的文件,这些文件就是python中的模块,例如我们生成随机数导入的random模块,import random导入的就是random.py这个文件,所谓的random模块其实就是一个文件名为random的py文件,python的模块就是一个python文件而已。

打开random文件看看里面的代码:
在这里插入图片描述
我们导入random模块之后,其实是在使用py文件里面的代码而已。

14.2 导入模块

导入模块的方式

方法1:import 模块名

  • 导入模块
    • import 模块名
    • import 模块名1,模块名2… 不推荐这种写法
  • 调用功能
    • 模块名.功能名()
import math
print(math.sqrt(4))  # sqrt开根号 2.0

方法2:from 模块名 import 功能名

  • 导入模块
    • from 模块名 import 功能1,功能2,功能3...
  • 调用功能
    • 功能名()
    • 注意:不用书写模块名.功能
from math import sqrt
print(sqrt(4))

方法3:from 模块名 import *

from math import *
print(sqrt(4))

as定义别名

方法4:import 模块名 as 别名

模块定义别名,如果进行了别名的定义,将来使用的时候只能使用定义的别名,而不能再次使用模块名。

import time as tt

tt.sleep(3)
print("I wander in your yard, looking forward to meeting you.")

方法5:from 模块名 import 功能名 as 别名

功能定义别名

from time import sleep as sl

sl(3)
print("I wander in your yard, looking forward to meeting you.")

14.3 制作模块

在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。也就是说自定义模块名必须要符合标识符命名规则

定义模块

新建一个Python文件,命名为 my_module.py,并定义 testA 函数

def textA(a, b):
    return a + b

测试和调用模块

在实际开中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,这个开发人员会自行在py文件中添加一些测试信息.,例如,在 my_module.py 文件中添加测试代码。

def textA(a, b):
    return a + b

print(textA(1, 2))

import my_module 导入模块中的所有代码,此时,无论是当前文件,还是其他已经导入了该模块的文件,在运行的时候都会自动执行 testA 函数的调用。

在这里插入图片描述

解决办法:
每个模块就是一个python文件,python文件一定会有自己的名字,__name__是一个系统变量,是模块的标识符,也就是说是每个python文件的标识符。如果__name__的使用位置是在自身模块里面,那么它的值就是”__main__”,否则使用位置不是在自身模块里面,那么这个__name__的值就是模块的名字(python文件名)

def textA(a, b):
    return a + b


# 只在当前文件中调用该函数,其他导入的文件内不符合该条件,则不执行testA函数调用
print(__name__)
if __name__ == "__main__":
    print(textA(1, 2) )

在这里插入图片描述

在这里插入图片描述

模块定位顺序

当导入一个模块,Python解析器对模块位置的搜索顺序是:由近及远
1.当前目录
2.如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录
3.如果都找不到,Python会查看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/

模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

注意:

  • 自己的文件名不要和已有模块名重复,否则导致模块功能无法使用。
  • 使用from 模块名 import 功能 的时候,如果功能名字重复,调用到的是最后定义或导入的功能。

场景1:模块名重复

# 自己的文件名不要和已有模块名重复,否则导致模块功能无法使用 random
import random
print(random.randint(1, 5))  # 1-5的随机数字

在当前目录新建一个random.py,里面什么都不写,运行会报错

在这里插入图片描述

场景2:定义一个同名函数在导入sleep功能的下面,调用的是后面的sleep

# 当使用from 模块名 import 功能 的时候,如果功能名字重复,调用到的是最后定义或导入的功能。
# 场景:time.sleep()
from time import sleep
def sleep(a):
    print(a)

sleep(3)

在这里插入图片描述

场景二:定义一个同名函数在导入sleep功能的上面,调用的是后面的sleep
在这里插入图片描述

名字重复的严重性

问题:import 模块名是否担心 功能名字重复的问题?
答案:不需要,因为调用的时候是 模块名.功能名()

在这里插入图片描述
打印出来的是<module ‘time’ (built-in)>,内置模块time

import time

print(time)  # <module 'time' (built-in)>

time = 1
print(time)  # 1

问:为什么变量也能覆盖模块功能?
答:在python语言中,数据是通过 引用 传递的。

14.4 all列表

如果一个模块文件中有__all__变量,当使用from xxx import *导入时,只能导入这个列表中的元素。

  • my_model模块代码
__all__ = ["testA"]

def testA():
    print("textA")

def testB():
    print("textB")
  • 导入模块的文件代码
    在这里插入图片描述

模块函数很多,只用一小部分的话,用__al__可以减少内存开支

14.5 包

包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py 文件,那么这个文件夹就称之为包。

制作包

[New] -> [Python Package] -> 输入包名 ->[OK] -> 新建功能模块(有联系的模块)。
注意: 新建包后,包内部会自动创建 init.py 文件,这个文件控制着包的导入行为。
在这里插入图片描述
在这里插入图片描述
1.新建包myfirstpackage
2.新建包内模块mymodel1和mymodel2
3.mymodel1模块代码

print("mymodel1")
def print_info01():
    print("mymodel1---print_info01")

4.mymodel2模块代码

print("mymodel2")
def print_info02():
    print("mymodel2---print_info02")

导入包

方法一

import 包名.模块名
包名.模块名.目标功能()

import myfirstpackage.mymodel1

myfirstpackage.mymodel1.print_info01()

在这里插入图片描述

方法二

from 包名 import *
模块名.目标功能()

注意: 必须在__init__.py 文件中添加__all__= [],控制允许导入的模块列表

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

【阅读笔记】Rapid, Detail-Preserving Image Downscaling

Rapid, Detail-Preserving Image Downscaling&#xff08;快速的图像缩放技术&#xff09; 该论文提出了一种基于卷积滤波器的算法&#xff0c;并确定滤波器的权值&#xff0c;使重要的细节保留在缩小比例的图像。更具体地说&#xff0c;它为更偏离局部图像邻域的像素分配更大…

Python多进程加快图片读取速度、多进程下图片的有序读取(mp.Queue)

Python多进程加快图片读取速度(mp.Queue) 多进程&#xff0c;加快图片读取&#xff0c;多进程下图片的有序读取&#xff0c;Python&#xff0c;multiprocessing&#xff0c;multiprocessing.Queue&#xff0c;opencv-python 文章结构 快速使用&#xff0c;多进程读取图片&…

冯诺依曼体系结构以及回答操作系统(是什么,为什么,怎么办)问题

目录 一、硬件冯诺依曼体系结构 二、软件2.1 计算机的层状结构2.2 操作系统的概念2.3 操作系统是什么&#xff1f;2.4 为什么要有操作系统&#xff1f;2.5 操作系统是怎么管理底层的软硬件资源的呢&#xff1f; 一、硬件 冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记…

HTML+CSS+JavaScript:九九乘法表

一、需求如图 二、思路及代码 1、JavaScript代码 稍微刷过一点算法题的小伙伴就很容易想到这题需要利用双层for循环来实现&#xff0c;思路也是比较简单的&#xff0c;我在这里就直接放代码了 不添加CSS渲染的代码如下 <!DOCTYPE html> <html lang"en"&…

JVM学习笔记(三)垃圾回收

相关文章&#xff1a; JVM中的新生代和老年代&#xff08;Eden空间、两个Survior空间&#xff09;_jvm eden_样young的博客-CSDN博客JAVA命令行工具&#xff08;一&#xff09;--JAVA - 简书JAVA命令行工具&#xff08;二&#xff09;-jps - 简书JAVA命令行工具&#xff08;三&…

AttributeError: module ‘torch.nn‘ has no attribute ‘module‘

import torch import torch.nn as nnclass LinearModel(nn.Module):def _init_(self,ndim):super(LinearModel,self)._init_()self.ndimndimself.weightnn.Parameter(torch.randn(ndim,1))#定义权重self.biasnn.Parameter(torch.randn(1)) #定义偏置def forward(self,x):# y …

【离散数学实验报告】最小生成树的生成

实验四&#xff1a;最小生成树 一、实验目的&#xff1a; 理解最小生成树的画法。提高学生编写实验报告&#xff0c;总结实验结果的能力&#xff0c;培养学生的逻辑思维能力和算法设计思想。能够独立完成简单的算法设计和分析&#xff0c;进一步用他们来解决实际问题&#xf…

谁能成为首个RedCap规模商用的厂商?

RedCap在“降本、小尺寸、低功耗”的呼声中逐渐成为后5G时代的宠儿&#xff0c;随着相关技术的成熟&#xff0c;RedCap如何进一步商用成为行业关注的焦点。RedCap的发展&#xff0c;离不开运营商、芯片厂商、终端厂商、模组厂商等产业关键节点的通力合作。那RedCap离正式商用还…

关于hessian2的一些疑点(0CTF来分析)

目录 前言&#xff1a;csdn很久不用了&#xff0c;打算最近拾起来&#xff0c;主要是监督自己。 非常可疑的点 另一种方法通过JNDI注入来 构造完整的链子 这里&#xff0c;希望佬们解答解答&#xff0c;非常感谢&#xff01;&#xff01;&#xff01; 前言&#xff1a;csdn很…

【C++】开源:cpp-tbox百宝箱组件库

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍cpp-tbox百宝箱组件库。 无专精则不能成&#xff0c;无涉猎则不能通。。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;…

ingress之503问题

ingress之503问题 背景&#xff1a; 部署好应用服务(nsyai-test名称空间下)后&#xff0c;通过ingress做七层反代&#xff0c;浏览器访问域名一直出现503的错误&#xff0c;其中30086端口为ingress-controller控制器nodeport型service端口 问题&#xff1a; 网上查看发现是不…

【http-server】http-server的安装、前端使用http-server启动本地dist文件服务:

文章目录 一、http-server 简介:二、安装node.js:[https://nodejs.org/en](https://nodejs.org/en)三、安装http-server:[https://www.npmjs.com/package/http-server](https://www.npmjs.com/package/http-server)四、开启服务&#xff1a;五、http-server参数&#xff1a;【1…

OpenMMLab MMTracking目标跟踪官方文档学习(一)

介绍 MMTracking 是PyTorch的开源视频感知工具箱。它是OpenMMLab项目的一部分。 它支持 4 个视频任务&#xff1a; 视频对象检测 (VID) 单目标跟踪 (SOT) 多目标跟踪 (MOT) 视频实例分割 (VIS) 主要特点 第一个统一视频感知平台 我们是第一个统一多功能视频感知任务的开源工…

自建DNSlog服务器

DNSlog简介 在某些情况下&#xff0c;无法利用漏洞获得回显。但是&#xff0c;如果目标可以发送DNS请求&#xff0c;则可以通过DNS log方式将想获得的数据外带出来。 DNS log常用于以下情况&#xff1a; SQL盲注无回显的命令执行无回显的SSRF 网上公开提供dnslog服务有很多…

windows 搭建ssh服务

1、官网下载安装包&#xff1a;mls-software.com 2、点击安装&#xff08;一直默认即可&#xff09; 3、配置 opensshServer 4、成功登录

云数据库MySQL相关帮助

1.为什么创建数据库后在数据库列表中不显示&#xff1f; 因为列表读取的是information_schema&#xff0c;刚创建的数据库是空库&#xff0c;没有数据写入&#xff0c;不会写入缓存表&#xff0c;所以不会显示&#xff0c;但不影响正常使用&#xff0c;可以直接对新建的数据库进…

2.数据结构面试题--消失的数字

面试题:消失的数字 数组nums包含从0到n的所有整数,但是其中缺了一个,请编写代码找出那个缺失的整数,你有办法O(N)时间内完成吗? 方法1.排序:依次查找 如果下一个数不是上一个数1,那么上一个数字1就是消失的数字 冒泡排序的话时间复杂度是O(n^2) qsort排序的话是O(NlogN) 需…

Python爬虫——urllib_get请求的quote方法和urlencode方法

quote方法&#xff1a; 将字符转换为对应Unicode编码 import urllib.request import urllib.parse# 获取 https://www.baidu.com/s?wd周杰伦 网页源码 url "https://www.baidu.com/s?wd" headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKi…

stm32 报错 dev_target_not_halted

烧录stm32H743&#xff0c;在cubeprogrammer里面点击connect&#xff0c;报错dev_target_not_halted 解决方法&#xff1a;先把H743的boot0引脚接到高电平上&#xff0c;然后少上电&#xff0c;此时会停止内核的运行&#xff0c;再点击connect即可 H743管脚&#xff1a; 在芯…

windows系统 安装 InfluxDB

一、InfluxDB下载 InfluxDB的windows&#xff08;64-bit&#xff09;下载地址为&#xff1a;https://dl.influxdata.com/influxdb/releases/influxdb-1.7.7_windows_amd64.zip 二、安装 influxDB是不需要安装的&#xff0c;只需要将压缩文件解压到相应的目录即可&#xff1b;…