学习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 系统攻击 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RQ-RAG:提升检索增强生成模型的查询精炼能力

人工智能咨询培训老师叶梓 转载标明出处 大模型在面对未见场景时,往往会产生不准确或虚构的回答,这限制了它们的实用性。为了解决这一问题,香港科技大学、香港理工大学和麻省理工学院的研究团队提出了一种名为RQ-RAG(Retrieval-A…

被低估的SQL

SQL是现代数据库管理系统中不可或缺的一部分。尽管它的使用已十分普遍,但在数据处理领域,SQL的某些功能和潜力仍然被许多人低估。接下来,小编将与您一起,探讨SQL的一些被忽视的特性,揭示它在数据管理中的真正实力。 1.…

模拟实现string类: clear函数、流提取(<<)和流插入(>>)运算符重载、>、<、==、<=、>=、!=的运算符重载、赋值运算符(=)重载等的介绍

文章目录 前言一、 clear函数二、流提取(<<)和流插入(>>)运算符重载三、 >、<、、<、>、!的运算符重载四、赋值运算符&#xff08;&#xff09;重载总结 前言 模拟实现string类: clear函数、流提取(<<)和流插入(>>)运算符重载、>、<…

记一次导入dbf文件后数据为空问题的解决方法

前言 省流&#xff1a;这篇文章最终采用的是更换导出文件格式的方法&#xff0c;看到这里觉得方法不适用的小伙伴可以不用浪费几秒钟看完这篇文章哦。 问题描述 作者使用的是Navicat数据库管理工具&#xff0c;然后在将源数据库的数据表导出为dbf格式文件后&#xff0c;再将…

Linux进阶命令-echodatealias

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 经过上一章Linux日志的讲解&#xff0c;我们对Linux系统自带的日志服务已经有了一些了解。我们接下来将讲解一些进阶命令&am…

JAVA中获取类的超类(父类)或接口的class类型

一、前言 这里所说的超类&#xff08;父类&#xff09;或接口&#xff0c;指的就是某个类继承了一个类或实现了N个接口。 比如ArrayList&#xff0c;它继承了一个类&#xff08; java. util. AbstractList<E> &#xff09;&#xff0c;这时候AbstractList就称为ArrayLi…

如何让人工智能训练更快

影响人工智能训练时间的因素 在深度学习训练中&#xff0c;训练时间的计算涉及到多个因素&#xff0c;包括 epoch 数、全局 batch size、微 batch size、计算设备数量等。下面是一个基本的公式来说明这些参数之间的关系&#xff08;注意&#xff0c;这只是一个基本的说明公式&…

ctfshow-文件包含

web78 <?phpif(isset($_GET[file])){$file $_GET[file];include($file); }else{highlight_file(__FILE__); } 判断是否存在file参数 如果存在 将包含这个参数值 文件 php://filter可以获取指定文件源码。当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执…

Jmeter终极线程组“Ultimate Thread Group“如何使用?

1、安装,点击"选项"&#xff0c;再点击"Plugins Manager"&#xff0c;下载"Custom Thread Groups" 2、添加"jpgc - Ultimate Thread Group" 3、"jpgc - Ultimate Thread Group"使用

DC 板 boot 测 nor 兼容性记录(qspi )

DC 板 boot 测 nor 兼容性记录&#xff08;qspi &#xff09; 软件问题&#xff1a; 1、DC板在跑 qspi时&#xff0c;在跑ddr 初始化部分需要修改以下参数&#xff0c;否则会在fsbl stage1 或者 stage 3 出错。 Board配置选 ad101_v10&#xff1b; 2、由于socket与DC板接触可能…

【springboot】父子工程项目搭建

父工程创建 1.新建一个spring项目 2.选择合适的springboot版本&#xff0c;点击【完成】&#xff0c;即创建父工程完毕 3.删除父工程中无用文件&#xff1a;src 创建子工程模块 1.右键项目名->新建&#xff08;news&#xff09;->模块&#xff08;Module&#xff09;…

【linux-Day2】linux下的基本指令

【linux-Day2】linux下的基本指令 一键查看操作系统的重要地位linux下的基本指令&#x1f4e2;ls&#xff1a;显示当前目录下所有的子目录和文件&#x1f4e2;pwd&#xff1a;显示用户当前所在的目录&#xff0c;在windows中&#xff0c;相当于显示当前目录的绝对路径。&#x…

Oracle绑定变量窥视与自适应游标共享

一.Oracle的绑定变量窥视与自适应游标共享 创建test表&#xff0c;列status存在2个值&#xff0c;有数据倾斜&#xff0c;在列status create table test as select rownum id,DBMS_RANDOM.STRING(A,12) name,DECODE(MOD(ROWNUM,500),0,Inactive,Active) status from all_obj…

2024最新精选文章!分享5款论文ai生成软件

在2024年&#xff0c;AI论文生成软件的出现极大地提升了学术写作的效率和质量。这些工具不仅能够帮助研究人员快速生成论文草稿&#xff0c;还能进行内容优化、查重和排版等操作。以下是五款值得推荐的AI论文生成软件&#xff0c;其中特别推荐千笔-AIPassPaper。 ### 千笔-AIPa…

【Jupyter Notebook】汉化

1.打开:Anaconda Prompt 2.输入:"activate Zhui01"(注意&#xff1a;Zhui01是刚创建的环境名字) activate Zhui01 3.输入:"pip install jupyterlab-language-pack-zh-CN" pip install jupyterlab-language-pack-zh-CN 4.打开:Jupyter Notebook 5.点击&q…

【稀疏矩阵】使用torch.sparse模块

文章目录 稀疏矩阵的格式coocsrcsc Construction of Sparse COO tensorsConstruction of CSR tensorsLinear Algebra operations&#xff08;稀疏与稠密之间混合运算&#xff09;Tensor methods and sparse&#xff08;与稀疏有关的tensor成员函数&#xff09;coo张量可用的ten…

E32.【C语言 】练习:蓝桥杯题 懒羊羊字符串

1.题目 【问题描述】 “懒羊羊”字符串是一种特定类型的字符串&#xff0c;它由三个字符组成&#xff0c;具有以下特点: 1.字符串长度为 3. 2.包含两种不同的字母。 3.第二个字符和第三个字符相同 换句话说&#xff0c;“懒羊羊”字符串的形式应为 ABB&#xff0c;其中A和B是不…

Python去中心化身份验证指南

随着区块链技术的发展,去中心化身份验证系统成为了保护个人数据安全和确保数字身份不被篡改的重要工具。本文将介绍如何利用Python和区块链技术构建一个简单的去中心化身份验证系统,包括基本概念、实现步骤和代码示例。 什么是去中心化身份验证系统? 去中心化身份验证系统…

SpringBoot学习(8)RabbitMQ详解

RabbitMQ 即一个消息队列&#xff0c;主要是用来实现应用程序的异步和解耦&#xff0c;同时也能起到消息缓冲&#xff0c;消息分发的作用。 消息中间件最主要的作用是解耦&#xff0c;中间件最标准的用法是生产者生产消息传送到队列&#xff0c;消费者从队列中拿取消息并处理&…

【网易低代码】第3课,页面表格删除功能

你好&#xff01; 这是一个新课程 CodeWave网易低代码 通过自然语言交互式智能编程&#xff0c;同时利用机器学 习&#xff0c;帮助低代码开发者进一步降低使用门槛、提高应用开发效率 【网易低代码】第3课&#xff0c;页面表格删除功能 1.拖拽组件link链接到表格中&#xff0c…