学习pyqt5相关知识回顾
1. 模块
1.1 import导入
1) 模块:是一系列功能的集合体,模块名.功能名,就可以使用模块的功能
2) 首次导入模块,就会立即执行模块里面的内容
3) 当前名称空间会产生一个名字module,指向module.py产生的名称空间.我们可以使用module.name/函数名,来调用module.py里面的内容.
modlue.py文件的内存地址引用变为0的时候,该名称空间才会被回收.就是模块测试.py文件运行完毕的时候
4) 在函数内部导入模块,这个模块名是属于函数局部名称空间的,其他地方是访问不到的.
5) 当module.py被直接运行的时候,__name__的值为__main__,当modlue.py作为模块导入时,__name__的值为模块名module.
1.2 from..import..导入
1) import导入后需要加模块名来调用模块里面的属性和功能.使用from导入后,就避免写前缀了.它会直接指向模块里面对应的功能或是变量值的内存地址.也就是说当前模块的name指向的是"张大仙"的内存地址,而不是name.
2) from modlue import *,默认导入的就是__all__里面的名字.我们可以通过控制__all__的内容来控制导入的内容.
1.3 模块的查找顺序
1)现在内存找,内存找不到就到硬盘找。内存的查找路径是按照sys.path的列表里面依次查找的
2)如果导入的模块和当前运行的程序不是在同一文件夹,那么可以将模块所在的文件夹,添加进入sys.path.再导入模块的时候,就可以被识别到。
3)只要在文件中间添加了此行代码,那么直接使用文件名就可以运行文件,不用再加python解释器。
2.包
2.1 包的概念
1)包就是一个含有__init__.py文件的文件夹
2)导包的流程和导入模块的流程是一样的(导入包pack)
——创建名称空间(pack的名称空间)
——执行python文件(运行pack.py但是没有只能运行__init__.py)
——在执行的名称空间中产生一个名字,指向前面的名称空间(所以当前名称空间里面的pack指向的是__init__.py的名称空间)
2.2 绝对导入
1)所有被导入的文件的sys.path参照的都是执行文件的sys.path.也就是说__init__.py文件的执行路径也是'D:\\PythonData\\pythonProject\\module-7'.我们直接导入running.在sys.path里面是找不到的。它的路径下面只有game.所以导入的时候是从包的起始位置game进行导入。
但是所有的前提都是,使用者要将game所在的路径添加到环境变量里面去,不管是包被嵌套了多少层。
'D:\\PythonData\\pythonProject\\module-7\\mm\\tt“
2)导入规则
入包时凡是带.的,.的左边必须是一个包
2.3 相对导入
. 表示当前文件所在的文件夹就是__init__.py文件所在的文件夹。
.. 表示上一层文件夹
pay的当前文件夹是gg,上一层文件夹是game.从game找walking.
相对导入的范围不可超出顶级包game.
2.4 补充
如果在__init__.py文件里面并没有导入包下面的模块名,调用的时候可以直接导入logging.config,此时会先检索__init__.py里面有没有config,没有再找模块名.但是调用的时候就必须加上前缀logging.config.
3.日志
3.1 日志基本配置
1) 日志的默认输出级别就是warning,warning以下的内容就不会输出.可以通过控制日志等级来控制日志输出
2) 日志的基本配置包括(1.日志级别,2.日志格式,3.asctime,4.日志输出位置)
import logginglogging.basicConfig(# 1.日志级别# DEBUG:10# INFO:20# WARNING:30# ERROR:40# CRITICAL:50level=10,# 2.日志输出格式# %(asctime)s -> 获取当前时间# %(name)s -> 当前日志的名字# %(pathname)s -> 产生日志文件的名字# %(lineno)d -> 产生日日志的行# %(levelname)s -> 产生日志的等级# %(message)s -> 日志的详细内容format='%(asctime)s %(name)s [%(pathname)s line:%(lineno)d] %(levelname)s %(message)s',# 3、asctime的时间格式datefmt="%Y-%m-%d %H:%M:%S",# 4、日志输出位置:终端|文件,不指定此项配置,默认输出到终端filename="user.log"
)# 日志的输出级别是可以设置的
logging.debug("debug")
logging.info("info")
logging.warning("warning")
logging.error("error")
logging.critical("critical")
输出日志的时候没有指定字符编码,所以默认使用的就是系统的编码方式.windows使用的gbk,mac和linux默认的就是UTF-8.pycharm默认是使用UTF-8打开的,所以对于windows电脑可能会出现乱码.
2024-07-05 08:58:30 root [/Users/f7692281/PycharmProjects/other-stydy/日志/日志测试.py line:34] DEBUG debug
2024-07-05 08:58:30 root [/Users/f7692281/PycharmProjects/other-stydy/日志/日志测试.py line:35] INFO info
2024-07-05 08:58:30 root [/Users/f7692281/PycharmProjects/other-stydy/日志/日志测试.py line:36] WARNING warning
2024-07-05 08:58:30 root [/Users/f7692281/PycharmProjects/other-stydy/日志/日志测试.py line:37] ERROR error
2024-07-05 08:58:30 root [/Users/f7692281/PycharmProjects/other-stydy/日志/日志测试.py line:38] CRITICAL critical
3.2 日志配置字典
日志的基本配置可能会出现乱码的问题,并且不同将日志同时输出到文件和终端.
1) loggers负责产生不同级别的日志,handlers负责处理不同级别的log,是输出到文件/终端,以..形式来产生log.formatters则是负责控制log的输出格式
2) 因为logging这个包在使用的时候,没有将congfig导入到__init__.py里面所以只能够使用logging.config()
3) 可以使用没有名字的日志记录器,将多个log记录到同一个log里面.
4) 日志轮转
# _*_ coding utf-8 _*_
# george
# time: 2024/1/9上午10:46
# name: settings.py
# comment:
import loggingLOGGING_DIC = {"version": 1.0,"disable_existing_log": False,# 日志格式,这里可以指定多种日志格式,这里的standard...就是对应日志名字"formatters": {"standard": {"format": '%(asctime)s %(name)s [%(pathname)s line:%(lineno)d] %(levelname)s %(message)s',"datefmt": "%Y-%m-%d %H:%M:%S"},"simple": {"format": '%(asctime)s %(name)s %(levelname)s %(message)s',"datefmt": "%Y-%m-%d %H:%M:%S"},"test": {"format": '%(asctime)s %(message)s'}},"filters": {},# 日志处理器:将记录的日志进行处理(输出到文件/显示到控制台)# 可以设置多个handler不同的handler做不同的处理,做不同的配置"handlers": {"console_debug_handler": {"level": 20, # 日志处理的级别限制"class": "logging.StreamHandler", # 输出到终端"formatter": "simple", # 日志格式},"file_info_handler": {"level": "INFO",'class': "logging.handlers.RotatingFileHandler","filename": "deal.log",# 日志大小,10M,日志文件达到10M的时候进行轮转# 默认单位为字节,1KB 1024 Byte,1MB为1024KB"maxBytes": 800,"backupCount": 10, # 日志文件保存数量的限制"encoding":"utf-8","formatter":"standard"},"file_debug_handler": {"level": 10,"class": "logging.FileHandler", # 保存到文件"filename": "test.log", # 日志存放的路径"encoding": "utf-8", # 日志文件的编码"formatter": "test" # 日志格式},"file_deal_handler": {"level": 20,"class": "logging.FileHandler", # 保存到文件"filename": "deal.log", # 日志存放的路径"encoding": "utf-8", # 日志文件的编码"formatter": "standard" # 日志格式},"file_operate_handler": {"level": 20,"class": "logging.FileHandler", # 保存到文件"filename": "operate.log", # 日志存放的路径"encoding": "utf-8", # 日志文件的编码"formatter": "standard" # 日志格式}},# 日志记录器"loggers": {"logger1": { # 导入时logging.getLogger时使用的app_name"handlers": ["console_debug_handler","file_info_handler"], # 日志将要分配给哪个handler进行日志处理"level": "DEBUG", # 日志记录的级别限制,和handlers里面的日志一起组成两层日志过滤"propagate": False # 默认为True,向更高级别的日志进行传递},"logger2": {"handlers": ["console_debug_handler", "file_debug_handler"], # 日志将要分配给哪个handler进行日志处理"level": "INFO", # 日志记录的级别限制,和handlers里面的日志一起组成两层日志过滤"propagate": False # 默认为True,向更高级别的日志进行传递},"": {"handlers": ["file_deal_handler","file_info_handler"], # 日志将要分配给哪个handler进行日志处理"level": "INFO", # 日志记录的级别限制,和handlers里面的日志一起组成两层日志过滤"propagate": False # 默认为True,向更高级别的日志进行传递},"用户操作": {"handlers": ["file_operate_handler"], # 日志将要分配给哪个handler进行日志处理"level": "INFO", # 日志记录的级别限制,和handlers里面的日志一起组成两层日志过滤"propagate": False # 默认为True,向更高级别的日志进行传递}}
}
4.configparser模块的读写
这个模块是用来加载一种特定格式的配置文件的.配置文件的后缀名为ini或是cfg是什么名字其实并不重要,只要让别人一看就知道你这是配置文件就可以了
- [default]是这一部分配置的标题,名字可以随便起.是这个配置文件section.每个section里面的这些配置被叫做option.
- 这些option的表现形式可以是=,也可以是:这两种做法都是被支持的.
- 在这里写入的是什么就会被读取到什么.添加"",""也会被读取到.所以如果定义的option为空时,直接=后面什么都不加就可以了.
4.1 config模块的读取
# settings.ini配置
from configparser import ConfigParser
config = ConfigParser()
CONFIG_PATH = os.path.join(Base_Dir,"settings.ini")
config.read(CONFIG_PATH,encoding="utf-8")
login_user = config.get('default',"LOGIN_USER")
login_type = config.get('default',"LOGIN_TYPE")
4.2 config模块的写入
# -5.1 记录登陆的用户名和用户类型
settings.config.set("default", "LOGIN_USER", name)
settings.config.set("default", "LOGIN_TYPE", user_type)
with open(settings.CONFIG_PATH, mode="w", encoding="utf-8") as f:settings.config.write(f)
5.eval和exec
5.1 eval
eval主要是用来执行表达式的,它执行的代码需要一个返回结果
5.2 globals和locals
globals()和locals()
globals()获取的是全局名称空间里面所有的名字.
loacls()获取的是局部名称空间里面所有的名字,如果locals()在全局里面使用的话,拿到的结果和globals()是一致的,我们当前在全局,所以当前的局部就是全局.
5.3 eval剩余两个参数
- g代表全局名称空间
- l代表局部名称空间
- 现在可以将eval执行的代码想象为一段函数的子代码,g就是它能够访问到的全局名称空间,l就是它的全局名称空间.这两个参数其实都是为了往里面传参数的.如果不传全局名称空间的话,默认就会将所有全局空间里面的名字都传递进去
- 我们不传第2和第3个参数的时候eval()是可以执行的,也就是说我们不定制全局名称空间和局部名称空间的时候.它默认会把所有全局的名字都传进去,就是globals()和locals().如果而我们定制了第2个参数,它只会传我们自定义的名字以及python内置的名字
- 表达式必须有返回值,如果没有返回值会直接报错
5.4 exec
- exec主要是用来执行代码块的,它的用法和eval是类似的,只是它是没有返回值的.
- exec只会将字符串里面产生的名字,存到第三个参数里面如果我们直接在全局打印a是会报错的
- 如果不传后面的两个参数,默认传递的就是globals()和locals(),字符串里面产生的名字会保存到locals()里面,而当前就是在全局,也就是说globals()就是locals()
- globals()绑定了全局名称空间,locals()并没有绑定当前局部名称空间,只是一个拷贝版本的字典
5.5 系统攻击
相关文章:

学习pyqt5相关知识回顾
1. 模块 1.1 import导入 1) 模块:是一系列功能的集合体,模块名.功能名,就可以使用模块的功能 2) 首次导入模块,就会立即执行模块里面的内容 3) 当前名称空间会产生一个名字module,指向module.py产生的名称空间.我们可以使用module.name/函数名,来调用module.py里面的内容. …...
OPENAIGC开发者大赛高校组银奖 | LonAC中小学编程学习平台
在第二届拯救者杯OPENAIGC开发者大赛中,涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到,我们特意开设了优秀作品报道专栏,旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者,希望能带给您…...
oneclick 命令:快速筛选控制变量的利器
目录 1. 命令语法2. 结果输出3. 使用示例4. 总结 在进行回归分析时,选择合适的控制变量对于确保模型的稳健性至关重要。然而,手动筛选变量组合不仅费时费力,还容易出错。为此,Stata 中的 oneclick 命令提供了一个高效的解决方案&a…...
Kotlin 代替Java接口回调,就这么简单
假如你使用旧的接口回调: 通常三步:1 定义接口和方法;2 使用接口中方法;3 继承接口并实现方法; 例: class XXXAdapter{public var mClickCollBack: clickCollBack? null //1定义interface clickColl…...

Codeforces Round 971 (Div. 4)——C题题解
本题的大意是一个青蛙从原点开始跳格子(0,0),最终要跳到点(x,y)去,并且每一步的步长不能超过k,问最短几步可以跳到终点 分析: 本题利用贪心思想,肯定是先跳最大的步长这样总体用的步数最长 代码演示: #inc…...

【论文阅读笔记】Tackling the Generative Learning Trilemma with Denoising Diffusion GANs
【论文阅读笔记】Tackling the Generative Learning Trilemma with Denoising Diffusion GANs Introduction方法 使用传统GANS建模去噪分布理解模式覆盖率 Paper:https://arxiv.org/abs/2112.07804 Code:https://github.com/NVlabs/denoising-diffusion-…...

常见 HTTP 状态码详解与Nginx 文件上传大小限制
在我们日常使用 Nginx 搭建网站或应用服务时,可能会遇到很多与文件上传和请求响应相关的问题。今天我们就来聊聊 如何限制文件上传的大小,并介绍一些常见的 HTTP 状态码 及其在 Nginx 中的处理方式。 一、文件上传大小限制 有时,我们需要限…...

在mac中使用numbers对数据进行分列(更详细的回答,已解决)
不想看我废话的同学直接看 “ 二、真正的方法 ” 不是抄袭不是抄袭,目前我能检索到的关于number分列的只有两篇回答,但我觉得有待补充,如果看不懂另外的回答,可以来看我的 这么问我猜大概率是Windows转macOS用户,不是…...

网格参数的应用和数学基础
引言 对于任意两个拓扑结构相似的表面,可以计算它们之间的一一对应映射。如果其中一个表面由三角形网格表示,那么计算这种映射的问题被称为网格参数化。映射到的表面通常被称为参数域。表面网格与各种域之间的参数化在计算机图形学和几何处理中有广泛的应…...
【Go】-基于Gin和GORM的小清单项目
目录 项目介绍 简介 技术 项目结构 项目分析 总结 项目介绍 简介 项目地址:knoci/list: 基于Gin的待办清单小项目 (github.com) 一个仿照github/Q1mi/bubble 做的一个gin框架练习 技术 gin 框架gorm 操作PostgreSQLini 配置文件 项目结构 list ├── R…...

【银河麒麟高级服务器操作系统】虚拟机服务器执行systemctl提示timeout——分析全过程及处理建议
了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://documentkylinos.cn 现象描述 产品信息 产品名称 银河麒麟高级服务…...

【Unity错误】No cloud project ID was found by the Analytics SDK
在编译默认的URP 2D项目时,出现这样一个错误:No cloud project ID was found by the Analytics SDK. This means Analytics events will not be sent. Please make sure to link your cloud project in the Unity editor to fix this problem. 原因&…...

2. 变量和指令(omron 机器自动化控制器)——1
机器自动化控制器——第二章 变量和指令 1 2-1 变量一览表MC通用变量轴变量▶ 轴组变量 运动控制指令的输入变量输入变量的有效范围▶ 枚举体一览表 运动控制指令的输出变量运动控制指令的输入输出变量 2-1 变量一览表 MC功能模块使用的变量分为两类。 一类是监视轴等的状态及…...

gpt4最新保姆级教程
如何使用 WildCard 服务注册 Claude3 随着 Claude3 的震撼发布,最强 AI 模型的桂冠已不再由 GPT-4 独揽。Claude3 推出了三个备受瞩目的模型:Claude 3 Haiku、Claude 3 Sonnet 以及 Claude 3 Opus,每个模型都展现了卓越的性能与特色。其中&a…...

Java:继承和多态(1)
在 Java SE 中,继承和多态是面向对象编程(OOP)的两个核心概念。通过继承,子类可以复用父类的代码;而通过多态,子类可以在不修改父类的前提下定义自己的行为。这两者结合起来使得代码更具扩展性、灵活性和可…...
在RabbitMQ中四种常见的消息路由模式
1. Fanout模式 Fanout模式的交换机是扇出交换机(Fanout Exchange),它会将消息广播给所有绑定到它的队列,而不考虑消息的内容或路由键。 工作原理: 生产者发送消息到Fanout Exchange。Fanout Exchange会将消息广播给…...

Android 使用JSON动画:Lottie框架基本使用
Lottie是什么? GitHub的一种跨平台动画解决方案三方框架 使用? 3步 1.引入最新的依赖:https://github.com/airbnb/lottie-android 我写文章时最新版本是6.5.2 添加到 app/build.gradle 文件的以下方法中dependencies {//lottie 动画implementation com.airbnb.android:l…...

【SQL】百题计划 - SQL最基本的判断和查询。
[SQL]百题计划 Select product_id from Products where low_fats "Y" and recyclable "Y";...
C++学习笔记----6、内存管理(五)---- 智能指针(2)
书接上回! make_unique()使用值初始化。例如,将初始类型初始化为0,对象为缺省构造。如果不需要这样的值初始化,例如,因为不管怎么样你都会覆写共初始值,你就可以省略值初始化,通过使用make_uniq…...

游戏出海迎新变局——海外游戏市场有哪些新趋势和新机遇?
游戏出海的热度越来越高,也面临着竞争加剧、门槛提升、成本增加的现实环境,游戏出海有哪些新变化和新趋势? 移动游戏出海的主要海外市场 在海外市场分布方面,美日韩仍然是我国移动游戏重要的海外市场,占据了中国出海…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...

恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...