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

学习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…...

游戏出海迎新变局——海外游戏市场有哪些新趋势和新机遇?

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

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...