从零学习python - 13模块的导入与使用(实现单例模式)
模块基础知识
# 项目 > 包 > 模块 > 变量\方法\类 # 在python中,模块是代码组织的一种方式,把功能相近的函数或类放到一个文件中,一个文件(.py)就是一个模块,模块名就是文件名去掉py后缀. # 好处:提高代码可复用性和可维护性,一个模块编写完成后,很方便在其他项目中导入.解决了命名冲突问题,不同模块相同的命名不会冲突. # 模块中可以存放变量,函数,类三种类型,并且在 import 模块名后,可以使用模块名进行调用 模块名.变量 模块名.函数 模块名.类
常用标准库:
builtins 内建函数默认加载
math 数学库
random 生产随机数
time 时间
datetime 日期和时间
calendar 日历
hashlib 加密算法
copy 拷贝
functool 常用的工具
os 操作系统接口
re 字符串正则匹配
sys python自身运行环境
multiprocessing 多进程
threading 多线程
json 编码和解码json对象
logging 日志记录,调试
# 在开发过程中肯定会遇到不同的问题,但如果已经有模块解决了这部分问题,我们就可以把这个模块叫过来帮忙.(基于项目导包) # 我们可以通过以下方式实现模块导入(导入也是一个动作,会默认将模块内的代码加载进内存空间): # 1- import 模块名: 这种方法导入模块,我们在需要使用模块中的变量\函数\类的时候,都需要以(模块名.变量 模块名.函数 模块名.类)的形式来调用# 2- from 模块名 import 变量,函数,类: 表示从模块中导入具体功能,这种方法导入模块可以直接使用导入的模块变量\函数\类# 3- from 模块名 import *: 表示导入该模块的所有内容,模块中可以定义__all__=[用来限制可以被*导入的变量\方法\类]# 4- from 包名 import 模块名: 导入后,需要使用 (模块名.变量\方法\类) 的方式调用# 5- from 包名.模块名 import 变量,函数,类: 如果导入某个包名下的模块,可以使用这个方法,导入进来的变量,函数,类可以直接使用.# 6- from .模块名 import 变量,函数,类: '.'表示从当前包内导入# 不管是import还是from的方式导入模块,都会将模块内的内容进行加载.这时模块中有方法调用的话,加载模块时就会执行模块中调用的方法. # 如果不希望执行这个方法,需要使用 __name__ . __name__在自己的模块中值为__main__,出了本模块__name__的值为自身模块名.所以可以进行判断.
# 文件夹可以存放一些非.py文件# 包中存放的都是.py文件,包在创建后会自动创建一个__init__.py文件(初始化加载),包中存放多个模块.# __init__.py文件的功能1: 只要导入这个包的时候,就会默认执行__init__.py中的内容,将__init__中的内容加载进内存,里面的方法和类可以使用包名调用. # 如果有些使用这个包就需要的出现的东西,就可以写在这里进行初始化加载.# 功能2: 如果使用from 包名 import *: 这种方式想要把这个包内的所有内容导入,需要在__init__.py模块中添加__all__ = [向外暴露的模块],否则无法导入
# 关于循环导入: 架构出错会出现循环导入问题
from B import b
# A.py中def a(self):b()from A import a
# B.py中def b(self):a()
# 上面的两个类分别处于两个模块中.当运行a()方法时,会因为需要B模块中的b()方法而执行 'from B import b' # 当导入时B模块中的b()方法时需要执行a()方法,所以会执行 'from A import a' 这样就会陷入循环导入而报错. # 避免循环导入: 1-重新架构 2-可以将导入语句放到函数体中或最后,需要使用时才进行导入,例如下方所示:
A.py中def a(self):from B import bb()
常用标准类库的使用
# 系统模块
print(sys.path) # 系统会在哪些目录下搜索你要加载进来的模块,并按照搜索顺序依次打印
print(sys.version) # 3.10.10 (tags/v3.10.10:aad5f6a, Feb 7 2023, 17:20:36) [MSC v.1929 64 bit (AMD64)]
print(sys.argv) # ['D:\\python_Projects\\object_try\\Object_12系统模块.py'] 运行程序时的一些参数 argv是一个列表,默认存放程序本身
# time模块
print(time.time()) # 1681367610.33326
# 返回当前时间(以秒为单位)浮点数表示 得到时间戳 经常用来求执行某段代码的时间差time.sleep(1) # 延迟执行给定的秒数。# 将时间戳形式转换成字符串或元组形式
t = time.time()
print(time.ctime(t)) # 将传入的时间戳转为字符串形式 Thu Apr 13 14:38:00 2023
print(time.localtime(t)) # 以元组的形式转换时间戳 time.struct_time(tm_year=2023, tm_mon=4, tm_mday=13, tm_hour=14, tm_min=39, tm_sec=26, tm_wday=3, tm_yday=103, tm_isdst=0)# 将time.time()的元组形式转换为时间戳
l = time.localtime(t)
print(l.tm_year) # 2023 元组形式的好处,可以使用元组时间戳对象单独访问元组的内容(年,月,日)
print(l.tm_mon) # 4
print(time.mktime(l)) # 1681368145.0 去掉精度值# 将元组的时间转换为字符串 根据格式规范将时间元组转换为字符串。
strf_time = time.strftime('%Y-%m-%d %H:%M:%S')
print(strf_time) # 2023-04-13 14:49:33 根据格式转换# 将字符串转换为元组的方式
r = time.strptime('2023-04-13', '%Y-%m-%d')
print(r) # time.struct_time(tm_year=2023, tm_mon=4, tm_mday=13, tm_hour=0, ...)
# datetime模块
datetime模块下有:time 时间date 日期datatime 日期时间timedelta 时间差 时间差值经常在缓存设置时通过与时间差计算,得到缓存保留多长时间的作用
print(datetime.time) # <class 'datetime.time'> 返回datetime.time对象
print(datetime.date) # <class 'datetime.date'> 返回datetime.date对象
print(datetime.date.today()) # 2023-04-13 返回当前日期now = datetime.datetime.now() # 得到当前日期和时间的时间戳
print(now) # 2023-04-13 15:12:53.024391
timedelta = datetime.timedelta(hours=5) # 时间差值:支持传递参数有days=0, seconds=0, microseconds=0,milliseconds=0, minutes=0, hours=0, weeks=0
print(timedelta) # 5:00:00 当前timedelta的值(时间差值)
time_fix = now + timedelta # 假如说要保存5个小时,通过计算得到结果.timedelta支持两个timedate对象进行计算操作
print(time_fix) # 五小时后失效的时间为:2023-04-13 20:12:53.024391
# random模块
print(random.random()) # 得到0-1之间的随机小数
# randrange(start,end,[步长]),如有步长,则会从通过步长遍历后的范围内得到随机数 (1, 10, 2) => 1,3,5,7,9
print(random.randrange(1, 10)) # 从start到end中随机一个数字.但不包含end这个数字
print(random.randint(1, 10)) # 从start到end随机一个数字,包含end
# choice(seq) 从非空序列中选择一个随机元素
list1 = ['你', '我', '他']
print(random.choice(list1)) # 我\你\他
# shuffle(x) 打乱列表顺序,函数返回None
random.shuffle(list1)
print(list1) # 打乱后顺序:['你', '我', '他'] => ['他', '我', '你']
random完成验证码功能
def get_verifycode():code = ''for i in range(4):# 从0,9之间随机一个数字转换为字符串形式ran1 = str(random.randint(0, 9))# 从Unicode字符中随机一个,并通过chr()将Unicode字符强转为str ord()则反之ran2 = chr(random.randint(65, 90))ran3 = chr(random.randint(97, 122))r = random.choice([ran1, ran2, ran3])code += rreturn codeprint(get_verifycode()) # 9N0t
hashlib模块
# 加密算法 支持'md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512', # 'blake2b', 'blake2s', # 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', # 'shake_128', 'shake_256' 加密
msg = '我爱你'
md_5 = hashlib.md5(msg.encode('utf-8'))
print(md_5.hexdigest()) # 4f2016c6b934d55bd7120e5d0e62cce3 加密之后的数据
第三方库
# 第三方库 : 非标准库的模块,需要自己导入到项目中 # 第三方库需要在控制台pip下载包 pip install 模块名 也可以通过File->settings->project:->Python Interpreter中手动管理
单例模式的实现
# 开发模式:单例模式 # 我们平时定义的类可以无限创建对象使用类中的属性和方法,每个对象都会在内存中开辟一块空间class Person:passp1 = Person() p2 = Person() # 不同对象开辟的不同内存地址 print(p1) # <__main__.Person object at 0x00000207650A71F0> print(p2) # <__main__.Person object at 0x00000207650A6FB0># 那如果我们并不需要很多对象产生,只是需要使用这个类中的某些功能方法,使用时才调用这块内存空间,该怎么办呢?# 这时候我们就需要使用单例模式,无论我们在创建时使用的哪种形式,我们在使用时都使用的是同一个对象!一个实例搞定!class Singleton:# 先定义也给属性,准备用这个属性承接开辟出来的内存空间并返回__instance = None# 重写类的__new__()方法def __new__(cls, *args, **kwargs):if cls.__instance is None:# 如果属性为空,则调用object.__new__()方法开辟内存空间,并赋值给类__instancecls.__instance = object.__new__(cls)# 这里会将内存地址默认返回给__init__()方法,初始化动作完成后赋值给对象名# 当后续调用时,类属性就不为空了,所以返回的还是这个对象内存地址return cls.__instances1 = Singleton() s2 = Singleton() print(s1) # <__main__.Singleton object at 0x000001B0F7ED54B0> print(s2) # <__main__.Singleton object at 0x000001B0F7ED54B0>
完成!
相关文章:
从零学习python - 13模块的导入与使用(实现单例模式)
模块基础知识 # 项目 > 包 > 模块 > 变量\方法\类 # 在python中,模块是代码组织的一种方式,把功能相近的函数或类放到一个文件中,一个文件(.py)就是一个模块,模块名就是文件名去掉py后缀. # 好处:提高代码可复用性和可维护性,一个模块编写完成后,很方便在其他项目中导…...
国产SSD、内存卷哭国外大厂,三星宣布减产涨价在路上了
PC 圈有一句话是这么说的:论价格屠夫还得看国产品牌! 可不是嘛,国产长鑫、长江算是彻底将全球存储芯片市场搅局者这一「骂名」坐实了! 不说特别早期,前几年吧,普通单条 8G DDR4 内存都能卖到六七百元&…...
数据库管理-第六十六期 SQL Domain(20230413)
数据库管理 2023-04-13第六十六期 SQL Domain1 基本介绍2 Domain的表达式和条件3 语法4 语义5 示例总结第六十六期 SQL Domain 上一期一笔带过了部分Oracle 23c的新特性,这一期重点讲一下SQL Domain新特性。 【https://docs.oracle.com/en/database/oracle/oracle-…...
《Vue3实战》 第一章 nods/npm安装、配置
1、nods.js安装(Windows) 1.1、下载并安装node https://nodejs.org/en/ , 安装到d盘nodejs目录 1.2、配置环境变量 path配置 1.3、配置全局包存放目录和缓存目录 在根目录下创建node_global(全局包存放目录)和node_cache&…...
JAVA练习104-四数相加 II
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、题目-四数相加 II 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示:这里可以添加本文要记录的大概内容: 4月10日练…...
【C++基础】引用(引用的概念;引用的特性;常引用;使用场景:做输出型参数、大对象传参、做输出型返回值、返回大对象的引用);引用和指针的区别)
六、引用 6.1 引用的概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。(语法上) 格式:类型& 引用变量名(对象名) …...
Redis只用来做缓存?来认识一下它其他强大的能力吧。
当今互联网应用中,随着业务的发展,数据量越来越大,查询效率越来越高,对于时序数据的存储、查询和分析需求也越来越强烈,这时候 Redis 就成为了首选的方案之一。 Redis 提供了多种数据结构,如字符串、哈希表…...
【ES】数据同步集群
【ES】数据同步&集群3.数据同步3.1.思路分析3.1.1.同步调用3.1.2.异步通知3.1.3.监听binlog3.1.4.选择3.2.实现数据同步3.2.1.思路3.2.2.导入demo3.2.3.声明交换机、队列1)引入依赖2)声明队列交换机名称3)声明队列交换机3.2.4.发送MQ消息…...
37岁男子不愿熬夜,回乡养鸡每天准时下班,青山绿水中养鸡,直播间里卖鸡蛋...
37岁男子不愿熬夜,回乡养鸡每天准时下班,青山绿水中养鸡,直播间里卖鸡蛋。今天和大家分享一个创业案例,他叫胡铭浩,来自安徽省旌德县,今年37岁,曾做过车床操作工,开过婚纱摄影店&…...
深度学习和人工智能之间是什么样的关系?
深度学习与人工智能概念的潜在联系,我们依然借助维恩图来说明,如图4.1所示。 1、人工智能 “人工智能”这个概念新鲜时髦但又含混模糊,同时包罗万象。尽管如此,我们仍尝试对 人工智能进行定义:用一台机器处理来自其周围环境的信息,然后将这些…...
实战打靶集锦-016-lampiao
提示:本文记录了博主打靶过程中一次曲折的提权经历 文章1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查4.1 80端口探查4.2 1898端口探查4.3 EXP搜索4.3.1 exploit/unix/webapp/drupal_coder_exec4.3.2 exploit/unix/webapp/drupal_drupalgeddon25. 提权5.1 系统信息…...
《Web前端应用开发》考试试卷(模拟题)
一、产品搜索页面 打开“考试文件夹”中的input.html,完成以下步骤: 注意:本题仅能在input.html的(1)为产品名称所在的div添加样式属性,使得产品名称保持在文本框的左边; (2…...
【react全家桶学习】react简介
react是什么? react是用于构建用户界面的JS库,是一个将数据渲染为HTML视图的开源JS库 谁开发的? 由Facebook开发,且开源 为什么要学? 原生JavaScript操作DOM繁琐、效率低 ( DOM-API操作 UI)使用JavaScript直接操作…...
此战成硕,我成功上岸西南交通大学了~~~
友友们,好久不见,很长时间没有更一个正式点的文章了! 是因为我在去年年底忙着准备初试,今年年初在准备复试,直到3月底拟录取后,终于可以写下这篇上岸贴,和大家分享一下考研至上岸的一个过程 文章…...
光耦继电器工作原理及优点概述
光耦继电器是一种电子元器件,也是固态继电器的一种,其主要作用是隔离输入与输出电路,用于保护或者控制电路的正常工作。 光耦继电器工作原理是利用光电转换器将外界信号转化为光信号,通过光纤传输到另一端,再由另一端的…...
【Mysql】mysql8.0.26解压包部署方式
版本背景: 操作系统:centos7.3 mysql版本:mysql-8.0.26-linux-glibc2.12-x86_64.tar 一、前期准备 1、检测操作系统自带安装的mysql和mariadb服务,如存在,需卸载 rpm -qa | grep mysql rpm -qa | grep mariadb 卸载…...
进销存管理系统能为企业带来哪些实际效益?
随着互联网的不断发展,如今的商业世界已经越来越向数字化转型。拥有一套完整的数字化的进销存管理能够极大地提升公司货物进出库存情况的效率和准确性,避免过程中出现不必要的错误和漏洞,从而帮助企业更加稳健地自我发展。那么,一…...
图片怎么转换成pdf格式?这几个方法帮你一键转换
现今电子书籍越来越受到欢迎,其中PDF格式也成为了一种常用的电子书籍格式。无论是工作还是学习,我们都可能会遇到需要将图片转换成PDF格式的情况,例如保存一些资料证明、公文公告、学习资料等。在这篇文章中,我们将为大家介绍三种…...
数据结构exp1_2学生成绩排序
目录 数据结构exp1_2学生成绩排序 程序设计 程序分析 数据结构exp1_2学生成绩排序 【问题描述】 对某班学生成绩排序。从键盘依次输入某班学生的姓名和成绩(一个班级人数最多不超过50人)并保存,然后分别按学生成绩由高到低顺序输出学生姓名和成绩,成绩相同时,则按输…...
在DongshanPI-D1开箱使用分享与折腾记录实现MPU6050数据读取
前言 上一篇文章使用RT-Smart的IIC驱动OLED屏幕,进行基本的字符串显示,在使用过程中对RT-Smart有了一定熟悉,准备使用SPI驱动ST7789,但SPI接口没有引出,本次使用手上已有的传感器MPU6050进行使用。 过程 本次直接开始添加离线包…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
