当前位置: 首页 > news >正文

从零学习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 圈有一句话是这么说的&#xff1a;论价格屠夫还得看国产品牌&#xff01; 可不是嘛&#xff0c;国产长鑫、长江算是彻底将全球存储芯片市场搅局者这一「骂名」坐实了&#xff01; 不说特别早期&#xff0c;前几年吧&#xff0c;普通单条 8G DDR4 内存都能卖到六七百元&…...

数据库管理-第六十六期 SQL Domain(20230413)

数据库管理 2023-04-13第六十六期 SQL Domain1 基本介绍2 Domain的表达式和条件3 语法4 语义5 示例总结第六十六期 SQL Domain 上一期一笔带过了部分Oracle 23c的新特性&#xff0c;这一期重点讲一下SQL Domain新特性。 【https://docs.oracle.com/en/database/oracle/oracle-…...

《Vue3实战》 第一章 nods/npm安装、配置

1、nods.js安装&#xff08;Windows&#xff09; 1.1、下载并安装node https://nodejs.org/en/ , 安装到d盘nodejs目录 1.2、配置环境变量 path配置 1.3、配置全局包存放目录和缓存目录 在根目录下创建node_global&#xff08;全局包存放目录&#xff09;和node_cache&…...

JAVA练习104-四数相加 II

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、题目-四数相加 II 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 4月10日练…...

【C++基础】引用(引用的概念;引用的特性;常引用;使用场景:做输出型参数、大对象传参、做输出型返回值、返回大对象的引用);引用和指针的区别)

六、引用 6.1 引用的概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间。&#xff08;语法上&#xff09; 格式&#xff1a;类型& 引用变量名(对象名) …...

Redis只用来做缓存?来认识一下它其他强大的能力吧。

当今互联网应用中&#xff0c;随着业务的发展&#xff0c;数据量越来越大&#xff0c;查询效率越来越高&#xff0c;对于时序数据的存储、查询和分析需求也越来越强烈&#xff0c;这时候 Redis 就成为了首选的方案之一。 Redis 提供了多种数据结构&#xff0c;如字符串、哈希表…...

【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&#xff09;引入依赖2&#xff09;声明队列交换机名称3&#xff09;声明队列交换机3.2.4.发送MQ消息…...

37岁男子不愿熬夜,回乡养鸡每天准时下班,青山绿水中养鸡,直播间里卖鸡蛋...

37岁男子不愿熬夜&#xff0c;回乡养鸡每天准时下班&#xff0c;青山绿水中养鸡&#xff0c;直播间里卖鸡蛋。今天和大家分享一个创业案例&#xff0c;他叫胡铭浩&#xff0c;来自安徽省旌德县&#xff0c;今年37岁&#xff0c;曾做过车床操作工&#xff0c;开过婚纱摄影店&…...

深度学习和人工智能之间是什么样的关系?

深度学习与人工智能概念的潜在联系&#xff0c;我们依然借助维恩图来说明&#xff0c;如图4.1所示。 1、人工智能 “人工智能”这个概念新鲜时髦但又含混模糊&#xff0c;同时包罗万象。尽管如此,我们仍尝试对 人工智能进行定义:用一台机器处理来自其周围环境的信息,然后将这些…...

实战打靶集锦-016-lampiao

提示&#xff1a;本文记录了博主打靶过程中一次曲折的提权经历 文章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&#xff0c;完成以下步骤&#xff1a; 注意&#xff1a;本题仅能在input.html的&#xff08;1&#xff09;为产品名称所在的div添加样式属性&#xff0c;使得产品名称保持在文本框的左边&#xff1b; &#xff08;2&#xf…...

【react全家桶学习】react简介

react是什么&#xff1f; react是用于构建用户界面的JS库&#xff0c;是一个将数据渲染为HTML视图的开源JS库 谁开发的&#xff1f; 由Facebook开发&#xff0c;且开源 为什么要学&#xff1f; 原生JavaScript操作DOM繁琐、效率低 ( DOM-API操作 UI)使用JavaScript直接操作…...

此战成硕,我成功上岸西南交通大学了~~~

友友们&#xff0c;好久不见&#xff0c;很长时间没有更一个正式点的文章了&#xff01; 是因为我在去年年底忙着准备初试&#xff0c;今年年初在准备复试&#xff0c;直到3月底拟录取后&#xff0c;终于可以写下这篇上岸贴&#xff0c;和大家分享一下考研至上岸的一个过程 文章…...

光耦继电器工作原理及优点概述

光耦继电器是一种电子元器件&#xff0c;也是固态继电器的一种&#xff0c;其主要作用是隔离输入与输出电路&#xff0c;用于保护或者控制电路的正常工作。 光耦继电器工作原理是利用光电转换器将外界信号转化为光信号&#xff0c;通过光纤传输到另一端&#xff0c;再由另一端的…...

【Mysql】mysql8.0.26解压包部署方式

版本背景&#xff1a; 操作系统&#xff1a;centos7.3 mysql版本&#xff1a;mysql-8.0.26-linux-glibc2.12-x86_64.tar 一、前期准备 1、检测操作系统自带安装的mysql和mariadb服务&#xff0c;如存在&#xff0c;需卸载 rpm -qa | grep mysql rpm -qa | grep mariadb 卸载…...

进销存管理系统能为企业带来哪些实际效益?

随着互联网的不断发展&#xff0c;如今的商业世界已经越来越向数字化转型。拥有一套完整的数字化的进销存管理能够极大地提升公司货物进出库存情况的效率和准确性&#xff0c;避免过程中出现不必要的错误和漏洞&#xff0c;从而帮助企业更加稳健地自我发展。那么&#xff0c;一…...

图片怎么转换成pdf格式?这几个方法帮你一键转换

现今电子书籍越来越受到欢迎&#xff0c;其中PDF格式也成为了一种常用的电子书籍格式。无论是工作还是学习&#xff0c;我们都可能会遇到需要将图片转换成PDF格式的情况&#xff0c;例如保存一些资料证明、公文公告、学习资料等。在这篇文章中&#xff0c;我们将为大家介绍三种…...

数据结构exp1_2学生成绩排序

目录 数据结构exp1_2学生成绩排序 程序设计 程序分析 数据结构exp1_2学生成绩排序 【问题描述】 对某班学生成绩排序。从键盘依次输入某班学生的姓名和成绩(一个班级人数最多不超过50人)并保存,然后分别按学生成绩由高到低顺序输出学生姓名和成绩,成绩相同时,则按输…...

在DongshanPI-D1开箱使用分享与折腾记录实现MPU6050数据读取

前言 上一篇文章使用RT-Smart的IIC驱动OLED屏幕&#xff0c;进行基本的字符串显示,在使用过程中对RT-Smart有了一定熟悉&#xff0c;准备使用SPI驱动ST7789&#xff0c;但SPI接口没有引出&#xff0c;本次使用手上已有的传感器MPU6050进行使用。 过程 本次直接开始添加离线包…...

Nature子刊 定制饮食去除半胱氨酸和蛋氨酸可诱导细胞自毁进而治疗脑瘤?

恶性胶质瘤是成人最常见的脑部肿瘤。恶性胶质瘤的致死率为100%&#xff0c;无法治愈&#xff0c;是一种极度的恶性肿瘤。如此糟糕的预后促使研究者及神经外科医生不断学习研究肿瘤生物学&#xff0c;期望创造更好的疗法。神经外科助理教授Dominique Higgins博士从事肿瘤生物学的…...

抛弃 TCP 和 QUIC 的 HTTP

下班路上发了一则朋友圈&#xff1a; 周四听了斯坦福老教授 John Ousterhout 关于 Homa 的分享&#xff0c;基本重复了此前那篇 It’s Time To Rep… 的格调&#xff0c;花了一多半时间喷 TCP… Ousterhout 关于 Homa 和 TCP 之间的论争和论证&#xff0c;诸多反复回执&…...

未来公寓智能化设计平台项目(下)

创业场景通过在社区入口附近建设共享办公室,带动海慧园和众汽佳苑创业氛围,也让社区出了居住以外有其它功能,并且结合教育、邻里模块让社区更有活力。住户可通过app查看共享空间的使用情况,以及可以远程控制各种设备。 顺应未来生活与就业、创业融合新趋势,构建“大众创新…...

常见分布式消息队列综合对比

本文将从&#xff0c;Kafka、RabbitMQ、ZeroMQ、RocketMQ、ActiveMQ 17 个方面综合对比作为消息队列使用时的差异。 1. 资料文档 Kafka&#xff1a;中&#xff0c;有 kafka 作者自己写的书&#xff0c;网上资料也有一些。 rabbitmq&#xff1a;多&#xff0c;有一些不错的书…...

怎么邀请主流媒体到现场报道

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好 主流媒体通常是指央媒&#xff0c;报纸杂志&#xff0c;电视台&#xff0c;地方重点媒体等&#xff0c;采访形式包括现场取材报道&#xff0c;媒体专访&#xff0c;群访等。通常主流媒体对选题要求较严格&#xff0c;因此在…...

2023年最强手机远程控制横测:ToDesk、向日葵、Airdroid三款APP免Root版本

前言 随着远程办公和远程协作的日益普及&#xff0c;跨设备、系统互通的远程控制软件已经成为职场人士不可或缺的工具之一。在国内&#xff0c;向日葵和ToDesk是最著名的远程控制软件&#xff1b;而在国外&#xff0c;则有微软远程桌面、AirDroid、TeamViewer、AnyDesk、Parse…...

用SQL语句操作oracle数据库--数据查询(上篇)

SQL操作Oracle数据库进行数据查询 Oracle 数据库是业界领先的关系型数据库管理系统之一&#xff0c;广泛应用于企业级应用和数据仓库等场景中。本篇博客将介绍如何使用 SQL 语句对 Oracle 数据库进行数据查询操作。 1.连接到数据库 在开始查询之前&#xff0c;需要使用合适的…...

模板学堂|DataEase图表样式解析

DataEase开源数据可视化分析平台于2022年6月正式发布模板市场&#xff08;https://dataease.io/templates/&#xff09;。模板市场旨在为DataEase用户提供专业、美观、拿来即用的仪表板模板&#xff0c;方便用户根据自身的业务需求和使用场景选择对应的仪表板模板&#xff0c;并…...

STM32看门狗

目录 独立看门狗 IWDG 什么是看门狗&#xff1f; 独立看门狗本质 独立看门狗框图 独立看门狗时钟 分频系数算法&#xff1a; ​编辑 重装载寄存器 键寄存器 溢出时间计算公式 独立看门狗实验 需求&#xff1a; 硬件接线&#xff1a; 溢出时间计算&#xff1…...

什么是划分子网?网络工程师划分子网有啥技巧?

随着互联网的快速发展&#xff0c;越来越多的组织和企业在其内部建立了复杂的网络系统来满足日常的信息传输和资源共享需求。而在这些网络系统中&#xff0c;划分子网&#xff08;也称为子网划分&#xff09;作为一种常见的网络管理方法&#xff0c;为组织和企业提供了更加灵活…...