【python基础学习09课_装饰器、模块、文件】

一、项目的日志

1、日志意义与级别


1、日志的意义:

项目的日志 -- 开发编写的,日志记录 -- 测试就是去查看日志信息(为了协助我们进行问题的定位)
可以根据日志,看是哪个应用的哪台机器,出现了什么问题,以及问题对于的代码行数等。便于定位问题


日志:记录程序在运行的时候流程是否正常 -- 可以是系统日志、可以是自定义的日志



2、日志的级别:

debug:  调试信息输出
info:   正常信息输出
warning:警告信息输出
error:  报错信息输出

注意:需要使用日志模块,就得先定义日志的级别 (DEBUG > INFO > WARNING > ERROR)



3、日志的使用:

1)import logging  # 导入python的日志模块
2)logging.basicConfig(level=logging.WARNING)  #设置日志级别
3)logging.日志级别,例如下面

# def fun1():
#     logging.info("正常信息输出")
#     logging.debug("调试信息输出")
#     logging.warning("警告信息输出")
#     logging.error("报错信息输出")
1)info级别的日志

root是用户身份

2)error级别的日志

3)debug级别的日志

4)warring级别的日志

5)利用函数的传递,在调用另一个函数的时候,也打印另一个函数日志

6)print 和 logging.info的打印是没有先后顺序的

 同样的代码打印的效果也会不同

或者是

二、装饰器--

1、自定义装饰器

自定义装饰器:在原有调用函数的前/后,额外添加一些代码/步骤。在不改变原有函数的情况下,给原有的函数增加一些步骤、功能,用于维护更新,也就是装饰原有的函数。

装饰器的语法规则:

def 第一个函数(用来接收原有函数本体的参数):
    def 第二个函数():
        增加一些代码的步骤,在原有函数之前,进行调用
        原有函数的调用
        增加一些代码的步骤,在原有函数之后,进行调用
        
    return 第二个函数的本体



上面写的这个函数就是装饰器,然后给原有的函数,通过在函数头部 @装饰器函数名 来使用装饰器。再不改变原有函数的情况下,通过装饰器做了很多操作。

@装饰器函数名
原有函数
Python装饰器是一种设计模式,用于修改一个函数、方法或类的行为,而不需要改变其使用方式。装饰器本质上是一个接收函数作为参数并返回一个新函数的可调用对象。装饰器经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等。

装饰器的作用可以概括为以下几点:

1. **代码重用**:装饰器可以让你在不修改函数代码的情况下,为函数添加额外的功能。这样可以减少代码重复,提高代码的可维护性。

2. **模块化**:通过使用装饰器,可以将与函数核心功能无关的代码(如日志记录、性能测试等)抽离出来,使函数更加专注于其核心任务。

3. **动态修改行为**:装饰器可以在运行时动态地修改函数的行为,而不需要在代码中显式地调用其他函数或修改函数定义。

4. **易于测试**:由于装饰器是独立的代码块,你可以单独测试每个装饰器,确保它们正确执行预期的任务。

5. **命名空间管理**:装饰器有助于管理变量作用域,防止全局命名空间的污染。

6. **封装**:装饰器可以将一系列操作封装在一起,隐藏内部实现,只暴露必要的接口。

装饰器有几种不同的形式,包括:

- **函数装饰器**:用于装饰函数,可以修改函数的行为。
- **类装饰器**:用于装饰类,可以修改类的行为。
- **方法装饰器**:用于装饰类的方法,可以修改方法的行为。

装饰器是Python中一个非常强大和有用的特性,可以帮助你写出更加清晰、简洁和可维护的代码。

 1)装饰器原理--不带位置参数的

2)装饰器原理--带位置参数的

但是没人会写 函数名+2个括号这种()()

2、升级版本装饰器

优化升级:
@符号,在原有函数的头部进行添加 -- @装饰器函数的名称
当程序运行的时候,遇到了@符号,就会自动取寻找这个函数进行执行
在运行装饰器函数的时候,会默认把原有函数的本体当做参数进行传入
只要遵循自定义装饰器的语法规则进行书写,就可以完成,在不改变原有函数调用的情况下,进行前/后置步骤的添加

在自动化的课程中,会存在一些框架自带的装饰器使用
1)正常使用的装饰器

2)装饰器传参

三、模块

python中: 包(package)  和 模块(module)

包(package):就是python的文件夹
模块(module):就是python文件 .py类型文件  但是模块不包含.py后缀,是前面的文件名

1、python中,很简单,一个是包,一个是模块

1)import 模块,使用模块中的所有方法

例如:

规则:

import 模块


举例:
import time

time.sleep(2)  # 强制休眠

# 获取当前时间
print(time.time())


使用方法时,是 模块.方法  例如:time.sleep(2)
2)from 模块 import 方法,使用模块中的1种方法
规则:
from 模块 import 方法

举例:

from time import sleep

print(sleep(2))


使用方法时,是 直接方法  例如:sleep(2)

四、文件

文件的类型:
在自动化的课程有对应的数据使用:excel\yaml\txt
文件就是,要么读,要么写


真正的文件和数据放在磁盘里面,但是读磁盘很慢。
当前需要的数据,会放在内存里面,读取较快,也可以清理内存


python能够读取计算机文件,将读取到的内容放到内存空间里

1、文件的读取

语法规则:

file = open("文件的路径", encoding="编码格式", mode="文件操作的方式")

注意:file是一个变量,可以自定义

文件的路径,我们一般选择  绝对路径
mode:读取的话,里面是'r'



文件读取的方式:
r - 读   w - 写(覆盖写入)  a - 追加写入(在原有的内容之后,进行追加写入)

r+    w+    a+   读写

python中的文件

 1)文件的本质

2)文件的读取


3)文件的关闭

存放前,被关闭

关闭前,存放到msg变量

4)只读取文件的第一行

5)读取文件的所有行数据

此时读取的数据为列表形式,每一行为一个元素,长度为行数

6)只打印文件中你想打印的内容

2、文件的写入

1)文件的覆盖写入-
mode='w'

不建议使用,会让数据丢失,无法找回

不过 ctrl+z好像是可以让覆盖的恢复一下

 

2)文件的追加写入

3)光标的问题

1、默认写在文字后面

2、读取会从光标处往读取,所以写完,要关闭文件再读取,直接写完就读,取光标后面啥也没有。啥也读不出来。

 要给文件一个读取(打开)操作,才能读

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Scala 之舞:林浩然与杨凌芸的 IDEA 冒险

Scala 之舞:林浩然与杨凌芸的 IDEA 冒险 The Dance of Scala: The IDEA Adventure of Lin Haoran and Yang Lingyun 在那个阳光明媚的日子里,林浩然如同一位英勇的探险家,踏入了 Scala 的 IntelliJ IDEA 开发环境的奇妙领域,他带着…

day7 字符数组

1:输入一个字符串,实现单词逆置 输入:"good good study" 输出:"study good good" 6 //单词逆置7 // good good study8 // study good good9 10 //整体逆置11 char str[50]"good good stu…

springboot集成logback打印彩色日志

一、logback介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: logback.qos.ch。它当前分为以下三个模块: logback-core:其它两个模块的基础模块。logback-classic:它是log4j的一个改良版本,同时它完整实…

C++基于多设计模式下的同步异步日志系统day6

C基于多设计模式下的同步&异步日志系统day6 📟作者主页:慢热的陕西人 🌴专栏链接:C基于多设计模式下的同步&异步日志系统 📣欢迎各位大佬👍点赞🔥关注🚓收藏,&am…

云手机运行在云端?安全性有保障吗

随着云计算技术的不断发展,云手机作为一种新兴的移动终端形态,逐渐成为人们关注的焦点。然而,对于许多人来说,云手机 是一个相对陌生的概念,安全性成为了他们最为关心的问题之一。本文将就云手机运行在云端的特点以及其…

JWT身份验证

在实际项目中一般会使用jwt鉴权方式。 JWT知识点 jwt,全称json web token ,JSON Web令牌是一种开放的行业标准RFC 7519方法,用于在两方安全地表示声明。具体网上有许多文章介绍,这里做简单的使用。 1.数据结构 JSON Web Token…

#include<ros/ros.h>头文件报错

快捷键 ctrl shift B 调用编译,选择:catkin_make:build)(要先在vscode上添加扩展:ros) 可以点击配置设置为默认,修改.vscode/tasks.json 文件 修改.vscode/tasks.json 文件,否则ros.h头文件会报错 内容修改为以下内…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:拖拽控制)

设置组件是否可以响应拖拽事件。 说明: 从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 ArkUI框架对以下组件实现了默认的拖拽能力,支持对数据的拖出或拖入响应,开发者只需要将这些组件…

残差网宽度残差网

目录 from # 从ResNet说起 # 更深的网络 # 理解shortcut # WRN之宽度残差块 # 退化现象 from WideResNet(宽残差网络)算法解析-鸟类识别分类-Pytorch实战-CSDN博客 # 前言 ResNet可以训练出更深的CNN模型ResNet模型的核心是建立前面层和后面层之间“短路链接”&#xff…

【Proteus仿真】【Arduino单片机】坐姿矫正提醒器设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器,使用LCD1602液晶显示模块、HC-SR04超声波模块、蜂鸣器、按键、人体红外传感器等。 主要功能: 系统运行后,LCD1602显示超声…

java——2024-03-03

String类的对象能被修改吗?如果不能需要用什么修改?StringBuilder和StringBuffer的区别?equals和区别谈谈对面向对象的理解重载和重写的区别说一下ArrayList,LinkedList底层实现以及区别什么是哈希冲突?hashMap和conCu…

tomcat动静分离和负载均衡

目录 引言 1.实验环境搭建 2.部署Nginx服务器及配置静态页面Web服务 3.部署Tomcat服务及配置动态页面Web服务 4.实验验收 动态页面 静态页面 引言 tomcat服务既可以处理动态页面,也可以处理静态页面;但其处理静态页面的速度远远不如nginx和apache…

笨办法学 Python3 第五版(预览)(三)

原文:Learn Python the Hard Way, 5th Edition (Early Release) 译者:飞龙 协议:CC BY-NC-SA 4.0 练习 30:假如 这是你将要输入的下一个 Python 脚本,它向你介绍了if语句。输入这个代码,确保它能够完美运行…

gin gorm学习笔记

代码仓库 https://gitee.com/zhupeng911/go-advanced.git https://gitee.com/zhupeng911/go-project.git 1. gin介绍 Gin 是使用纯 Golang 语言实现的 HTTP Web框架,Gin接口设计简洁,提供类似Martini的API,性能极高,现在被广泛使用…

基于ZYNQ PS-SPI的Flash驱动开发

本文使用PS-SPI实现Flash读写,PS-SPI的基础资料参考Xilinx UG1085的文档说明,其基础使用方法是,配置SPI模式,控制TXFIFO/RXFIFO,ZYNQ的IP自动完成发送TXFIFO数据,接收数据到RXFIFO,FIFO深度为12…

Vmware Workstation 不可恢复错误:0xc0000005 has occured

上周打开虚拟机的时候报错:Vmware Workstation 不可恢复错误:0xc0000005 has occured,查看网上资料说是vmware版本太低,需要手动更新本地版本。 由于本地网络不是很好,没能正常更新,无意中出现问题前更改了…

概率基础——极大似然估计

概率基础——极大似然估计 引言 极大似然估计(Maximum Likelihood Estimation,简称MLE)是统计学中最常用的参数估计方法之一,它通过最大化样本的似然函数来估计参数值,以使得样本出现的概率最大化。极大似然估计在各…

docker单节点搭建在线商城

本文档使用到的软件包以上传到资源中 目录 1. 创建容器并配置基础内容 1.1 将gpmall-repo上传到容器中 1.2 添加yum源 2. 安装基础服务 2.1 安装JAVA环境 2.2 安装Redis缓存服务 2.3 安装Elasticsearch服务 2.4 安装Nginx服务 2.5 安装MariaDB数据库 2.6 安…

数据库分库分表中间件选择

目前分库分表的中间件有三种设计思路,分别是: 采用分散式架构,适用于用Java开发的高性能轻量级OLTP应用程序,以Sharding-JDBC为代表。采用中间层Proxy架构,提供了静态输入和所有语言支持,适用于OLAP应用程…

验证Tomcat进程是否启动成功 ps -ef | grep tomcat

验证Tomcat启动是否成功,有多种方式: 查看启动日志 more /usr/local/apache-tomcat-9.0.86/logs/catalina.out tail -50 /usr/local/apache-tomcat-9.0.86/logs/catalina.out 查看进程 ps -ef | grep tomcat 注意: ps命令是linux下非常强…