python一直以代码简洁优雅而著称,这篇文章介绍的小技巧,就是如何优雅地对一个类的属性进行赋值和取值。不过不仅仅如此,本文章还为类属性的查找顺序,以及装饰器在类方法的使用打下了基础。

文章目录

    • 待解决的问题
    • 属性变为方法
    • @property装饰器
    • 描述符
    • 描述符的改进
    • 扩展知识点
      • 描述符添加额外方法
      • 属性查找顺序
      • 函数也是描述符

待解决的问题

先看下面的例子

class People:def __init__(self):self.age = 3if __name__ == '__main__':xiaofu = People()print('-' * 10)print(xiaofu.age)  # 3xiaofu.age=100print(xiaofu.age)  # 100xiaofu.age=-10print(xiaofu.age)  # -10

对于定义的类People有一个实例属性age表示实例的年龄,对于实例xiaofu,我们可以任意设置其年龄,即使有些数字根本就不合理。

这就是我们这篇文章要解决的问题,如何在不改变操作习惯的前提下限制对属性的合理赋值范围,例如年龄age不能为负值。

属性变为方法

首先是最原始的办法,不直接暴露属性,而是暴露出两个方法分别用于赋值和取值

class People:def __init__(self):self.__age = 3def set_age(self, value):if value >= 0:self.__age = valueelse:print('Age can not be negative value')def get_age(self):return self.__ageif __name__ == '__main__':xiaofu = People()print(xiaofu.get_age())  # 3xiaofu.set_age(-10)  # Age can not be negative valueprint(xiaofu.get_age())  # 3xiaofu.set_age(10)print(xiaofu.get_age())  # 10

这是个看似有效其实很笨的方法。

首先,用户为了操作一个属性,必须记住两个方法,要是方法命名规则规范还好,不规范那简直就是要了亲命。再者如果有多个类似的属性,一下子类就变得重复臃肿了起来,不符合代码DRY的原则;

DRY: Don’t Repeat Yourself

其次,大家也都知道,python根本就没有绝对的内置属性,不让用户直接访问也只是通过改了个名字曲线救国而已,dir(xiaofu)或者xiaofu.__dict__一查就能查到,像刚才的__age就改成了_People__age

dir()用于显示所有的属性,方法也是一种属性所以也会显示;__dict__只是显示用户自定义的属性,并不会显示方法

所以这种方式在别的语言也许可以,在python中是坚决不行的。

@property装饰器

来看看第一种改进措施

class People:def __init__(self):self.__age = 3@propertydef age(self):return self.__age@age.setterdef age(self, value):if value >= 0:self.__age = valueelse:print('Age can not be negative value')if __name__ == '__main__':xiaofu = People()print('-' * 10)print(xiaofu.age)  # 3xiaofu.age=100print(xiaofu.age)  # 100xiaofu.age=-10  # Age can not be negative valueprint(xiaofu.age)  # 100

这里通过@property装饰器将其中一个方法变成了属性,方法的名字变成了属性可以被直接访问。还对一个同样名字的方法用装饰器变成了setter,当向该属性赋值的时候会调用该方法。

通过打印的结果看,恢复了原先的属性的调用方式,而不再是两个难记的方法。虽说用户还是可以通过dir()或者__dict__查看到真正的属性,但是只要不是有人故意找事,这种方式已经基本帮我们完成了比较优雅地属性取值范围限制。

但是@property还是不能复用,不满足DRY的原则。通过对两个方法添加装饰器来达到对外地统一接口,使用起来很舒服,但假设有10个这种属性,就得创造20个这种方法,这么臃肿的一个类想想就很头疼。

必须得把这两种方法单独提出来,去耦合。

描述符

再来看看第二种改进措施。

python中规定,只要一个对象包含__get__方法,就是描述符对象(Descriptor)。当然,通常的描述符对象还包含__set____delete__方法。只包含__get__方法的描述符叫做非数据描述符(Non-Data descriptor),只读,而同时包含了另外两个方法的叫做数据描述符(Data descriptor),可读可写。

如果类的属性是描述符对象,在执行取值操作时,会执行描述符对象的__get__方法,在执行赋值操作时,会执行描述符对象的__set__方法,而删除操作时,会执行__delete__方法。

关于删除属性,如果该属性不是描述符,会抛出异常,该属性只读。如果该属性是描述符但是没有实现__delete__方法,也会抛出只读的异常。如果类中定义了__delattr__,其优先级高于属性的__delete__

class MyDescriptor:def __init__(self,default):self.val=defaultdef __get__(self, instance, owner):passdef __set__(self, instance, value):passdef __delete__(self, instance):passclass People:age = MyDescriptor(0)

这是一个典型的描述符类的结构以及调用方法,这里方法的参数有点多,我们一个个来看。

  • instance - 这是包含了描述符对象的类实例,这里就是具体的People对象
  • self - 和所有其他类一样,self表示当前类的实例,这里就是具体的MyDescriptor对象
  • owner - 是instance这个实例对应的类名,这里就是People类
  • value - 赋值时候等号右边传递进来的值

下面是具体实现的代码

class MyDescriptor:def __init__(self,default):self.val=defaultdef __get__(self, instance, owner):return self.valdef __set__(self, instance, value):if value >=0:self.val = valueelse:print('Negative value is not allowed')def __delete__(self, instance):print('delete')class People:age = MyDescriptor(0)if __name__ == '__main__':xiaofu = People()print('-' * 10)print(xiaofu.age)  # 0xiaofu.age=100del xiaofu.age  # deleteprint(xiaofu.age)  # 100xiaofu.age=-10  # Negative value is not allowedprint(xiaofu.age)  # 100

这样就真正达到了优雅地限制属性取值范围的目的。

需要注意,必须在class级别定义描述符对象,如果像下面这样并不会自动调用描述符的__get__或者__set__方法

class People:def __init__(self):self.age = MyDescriptor(0)

我承认这是个很让人困惑的设定,同时这也引出了描述符的一个大问题,那就是多个实例共享同一描述符对象

if __name__ == '__main__':xiaofu = People()zhangsan = People()print('-' * 10)print(xiaofu.age)  # 0print(zhangsan.age)  # 0xiaofu.age=100print(xiaofu.age)  # 100print(zhangsan.age)  # 100

因为实例都会有类属性,所以xiaofu和zhangsan都会有age这个属性。这里即使只操作xiaofu的年龄,zhangsan的年龄也会跟着变,这显然不合逻辑,所以还需要对现有的描述符进行改进。

描述符的改进

既然在赋值和取值的时候都会传递进来instance变量,那么就可以在描述符类中添加一个字典,按照不同instance做为key去存储值应该就可以了。这里可以用原生字典,不过为了减少内存泄漏,我采用了弱引用的字典

python中是按照内存被变量的引用个数来决定是否回收,引用变为0则回收。弱引用就是不占用内存引用个数的变量,当其余的引用都消失后,内存自动被回收。通常用于缓存的数据。

import weakrefclass MyDescriptor:def __init__(self, default):self.val = defaultself.info = weakref.WeakKeyDictionary()def __get__(self, instance, owner):return self.info.get(instance, self.val)def __set__(self, instance, value):if value >= 0:self.info[instance] = valueelse:print('Negative value is not allowed')def __delete__(self, instance):print('delete')

这里创建了一个弱引用字典self.info,每次赋值的时候会将不同的实例做为key存进去,取值的时候再以实例做为key获取,找不到的就返回默认值。

效果如下

if __name__ == '__main__':xiaofu = People()zhangsan = People()print('-' * 10)print(xiaofu.age)  # 0print(zhangsan.age)  # 0xiaofu.age = 100print(xiaofu.age)  # 100print(zhangsan.age)  # 0zhangsan.age=20print(xiaofu.age)  # 100print(zhangsan.age)  # 20

这样子基本在绝大多数场合都没问题了,除非遇上了无法被哈希的实例,例如list的之类。为了解决这个问题,python3.6开始又给描述符引入了一个新的方法__set_name__

def __set_name__(self, owner, name):pass

其中name就是该描述符对象的名字。

再次修改下描述符类定义

class MyDescriptor:def __init__(self, default):self.val = defaultdef __get__(self, instance, owner):return instance.__dict__.get(self.name, self.val)def __set__(self, instance, value):if value >= 0:instance.__dict__[self.name] = valueelse:print('Negative value is not allowed')def __set_name__(self, owner, name):self.name = namedef __delete__(self, instance):print('delete')

通过对每个实例添加一个新的实例属性来达到目的。

扩展知识点

将描述符的基本使用和改进版本弄懂后,下面说几个扩展的知识点。

描述符添加额外方法

既然描述符也是一个类对象,当然也可以往里面添加自定义方法,这就为属性添加了额外接口。例如想要实现一个年龄转出生年份的接口就可以用类似的方法,这里就不演示了。

属性查找顺序

在描述符之前,我们可能只知道类属性和实例属性,并且同名的实例属性会覆盖类属性。但是引入了描述符之后,这个顺序会有点改变。

方法也是属性的一种,查找顺序对方法也有效

首先,不管是类还是类的对象,都会有各自的__dict__属性,里面存放的是用户自定义的属性。同时描述符是在类下面定义的属性,所以只存在于类的__dict__中。下面来看看描述符和实例属性哪个优先级比较高。

先来看非数据描述符

class MyDescriptor:def __init__(self, default):self.val = defaultdef __get__(self, instance, owner):return self.valclass People:age = MyDescriptor(0)if __name__ == '__main__':xiaofu = People()xiaofu.__dict__['age']=10print(xiaofu.age)  # 10

可以看出,非数据描述符的优先级低过实例属性

再来看看数据描述符

class MyDescriptor:def __init__(self, default):self.val = defaultdef __get__(self, instance, owner):return self.valdef __set__(self, instance, value):passdef __set_name__(self, owner, name):passdef __delete__(self, instance):passclass People:age = MyDescriptor(0)if __name__ == '__main__':xiaofu = People()xiaofu.__dict__['age']=10print(xiaofu.age)  # 0

可见,数据描述符的优先级要高于实例属性

所以我们可以重新整理一下在进行类似xiaofu.age操作的时候,python是怎么去查询的

  1. 如果age是内置的属性,直接被找到
  2. 去类的__dict__中查找,如果查找到了age,并且是数据描述符,直接执行其中的__get__方法。否则去父类的__dict__中查找,一直往上
  3. 去实例的__dict__中查找
  4. 再去类的__dict__中查找,如果查找到了age(一定是非数据描述符),执行其__get__方法。如果找到了普通属性直接返回
  5. 放弃查找,抛出异常

这是执行取值时候的顺序,赋值时候的优先级也类似。

函数也是描述符

上面说的都是属性,并没有提到方法。

方法就是一个函数,但是区别就在于会自动处理第一个self参数。python中一切皆对象,函数也不例外,如果看一下函数类的定义,会发现也有一个__get__方法

class Function(object):. . .def __get__(self, obj, objtype=None):"Simulate func_descr_get() in Objects/funcobject.c"if obj is None:return selfreturn types.MethodType(self, obj)

这说明函数本身也是描述符,并且当函数是类方法时,还利用types.MethodType()将其绑定到了类的实例上。这也就是为什么类方法能自动处理self的原因。

说这个主要是为后面装饰器在类方法上的使用做铺垫,因为一个类方法被类装饰器装饰以后就变成了对象,失去了函数的描述符特性,变得不能自动处理self参数。此时就需要我们手动在类装饰器中定义__get__方法完成这一过程。

我会在装饰器进阶的博客中详细说明,欢迎大家关注。

我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。

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

相关文章

  1. HDFS读写数据流程

    1.HDFS读数据流程HDFS客户端通过Distributed FileSystem向Namenode请求下载文件,Namenode通过查询元数据,找到文件所在的地址;Distributed FileSystem返回一个FSDataInputStream对象给客户端以便读取数据(FSDataInputStream中封装着DFSInputStream对象,该对象管理着nameno…...

    2024/4/10 20:52:58
  2. django中Value的用法

    Value对象允许我们自定义字段 Student.objects.annotate(age=Value(100), output_field=IntegerField())此时我们的查询集的每一个对象都会有一个age属性,并且值为100 如果我们想要定义更加复杂的对象,比如我们在这里进行一个查询对象的某个字段的值,也是支持的 比如Value的…...

    2024/4/22 8:38:39
  3. vue用编程式路由传递对象,目标页拿到数据后刷新页面后回退参数会丢失

    原因: vue路由传递参数如果用params传递参数,那么页面刷新就会丢失数据,可以改用query来传递参数,这样刷新就不会丢失. 如果传递的是对象,注意要把对象转为字符串,否则刷新就会变为undefined了. 另外,二者还有点区别,直白的来说query相当于get请求,页面跳转的时候,可以…...

    2024/5/1 5:01:26
  4. Vue常用API

    选项 el 类型 string | element vue实例挂载的dom元素 data 类型 obj | function vue 实例的数据对象 因为组件创建的实例会共享引用同一个data,所以在组件中 data只能是函数。 methods 类型 { [key: string]: function } 函数中this绑定到Vue实例 computed 类型 { [key: st…...

    2024/5/7 0:44:00
  5. 百度,阿里,腾讯,秋招在即,弄懂这些Java面试题,让你如虎添翼

    不知不觉,2020年已经过去了一半,恭喜2021届小伙伴成功迈进应届生行列,即将到来的秋招,你做好准备了吗? 小编这边准备了一份秋招Java面试大纲~ 带来了一些你或许需要准备的东西 Java+并发+spring+数据库+Redis+JVM+Netty等 01 Java基础 List 和 Set 的区别 HashSet 是如何保…...

    2024/5/6 23:43:52
  6. AS导入项目报错Failed to resolve

    AS添加Github项目报错Failed to resolve: com.github.GrenderG:Toasty:1.1.4,这是因为项目中依赖的库com.github.GrenderG:Toasty:1.1.4没找到造成的。 解决方法: 在project目录下的build.gradle文件中,添加如下代码: maven {url "https://jitpack.io"}重新运行即…...

    2024/4/26 2:01:21
  7. Java 面向对象之final

    Java 面向对象之finalfinal:不可改变。可以⽤于修饰类、⽅法和变量。局部变量 -- 引⽤类型成员变量 final:不可改变。可以⽤于修饰类、⽅法和变量。 类:被修饰的类,不能被继承。 ⽅法:被修饰的⽅法,不能被重写。 变量:被修饰的变量,不能被重新赋值。 局部变量 – 引⽤类…...

    2024/4/23 13:30:58
  8. Java中的数据类型

    Java中的数据类型 Java中的数据类型分为两大类: (1)基本数据类型: <1>数值型: ①整数类型: byte short int long ②小数类型: float double <2>字符型: char <3>布尔型: boolean (2)引用数据类型 (1)类 (2)接口 (3)数组...

    2024/4/10 20:52:52
  9. JAVA学习随笔:权限修饰符以及特殊抽象类(接口)

    访问控制符/权限修饰符 修饰: 类, [静态]成员变量, [静态]成员方法, 构造方法 public: 公开的, 公共的 protected: 受保护的 (default): 默认的, 不加default关键字, 不写任何内容 private: 私有的 自己类中 public protected default private 同包(没有关系的类) p…...

    2024/4/19 12:53:01
  10. jmeter的下载安装以及配置

    jmeter的下载安装以及配置 一、下载jmeter 进入官网下载:点此进入jmeter官网二、配置环境变量 1、jdk变量配置:此链接里面讲了jdk的配置 2、jmeter变量配置:添加JMETER_HOME系统变量:jmeter的安装目录编辑CLASSPATH变量: %JMETER_HOME%\lib\ext\ApacheJMeter_core.jar; %…...

    2024/5/1 10:04:33
  11. SpringBoot系列(一) 快速搭建SpringBoot项目

    虽然SpringBoot 用了不短的时间,一直没有去好好的记录一下,打算重新系统的学习一下SpringBoot 。 虽然不涉及源码部分,还是记录一下吧。 首先 先通过Maven搭建一个父级工程。 将SpringBoot的各个知识点创建 Module 子模块。点击下一步之后点击下一步项目结构Pom.xml 文件<…...

    2024/5/4 22:38:26
  12. 公司中台项目总结(一)技术选型

    公司中台项目总结(一)技术选型最近,应公司老大要求,对公司已有的SaaS平台进行整体的架构调整。相当于废弃旧平台,将功能以及一些需求全部迁移到新的平台,而且新平台之前也没有一个基础的base版本,只能从0开始重构。这就比较麻烦,涉及到技术选型和框架选型。基本技术的话…...

    2024/4/10 20:52:47
  13. 蒙特卡洛非线性规划code

    1.定义目标函数f 和约束向量函数g 首先编写M 文件mente. m 定义目标函数f 和约束向量函数g function [f,g] = mente(x) ; f=x(1)^2 + x(2)^2 +3*x(3) ^2 +4 * x(4)^2 + 2 *x(5)^2 -8*x(1) -2*x(2) -3*x(3)...- x(4) -2*x(5); g = [sum(x) -400 x ( 1) +2 * x(2) +2 *x(3) +x( 4…...

    2024/5/3 13:08:04
  14. Java 小白 if 日程查询系统

    //目前只能将查询时间精确到小时,仍在寻找能够精确到分钟的方法 //可随意添加时间、事件 //仅供参考 package 工具类;import java.util.Scanner;public class 日程查询系统 {public static void main(String[] args){Scanner input = new Scanner(System.in);System.out.print…...

    2024/4/20 15:44:56
  15. 粒子跳动web网页效果

    HTML的代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv=&quo…...

    2024/5/4 4:54:17
  16. [Tensorflow2.0入坑指南]No module named ‘tensorflow_datasets‘

    问题 import tensorflow as tf from transformers import * import tensorflow_datasets-------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) <ipython-input-2-92ebf1bc215d>…...

    2024/5/3 0:29:25
  17. IDEA自动生成 构造方法 get set方法

    对于一个类,创建好成员变量后右键单击,选中Generate然后这几个依次是构造方法 get set get和set我们可以选中一个,然后选中要生成的变量,点击OK这样就可以自动生成构成方法 get方法 set方法...

    2024/4/10 20:44:17
  18. Sqoop Hive HDFS HBase 命令行实验

    1、使用windows客户端登录mysql建表 修改虚拟机mysql的远程登录权限 mysql -uroot -proot; use mysql; show tables; update user set host=% where host = localhost; flush pricilges;给本地ip 192.168.198.1及lining05授权 GRANT ALL PRIVILEGES ON *.* TO root@192.168.198…...

    2024/5/4 23:54:27
  19. 零基础学习web前端开发学习路线

    移动互联网的快速发展让web前端开发人员成为目前市场上紧俏、稀缺的人才。对于零基础想要学习web前端开发的人来说,应该从哪些方面入手呢?下面,千锋上海小编就给大家介绍一下。对于零基础的人,学习web前端开发可以按照以下学习路线:1、前端页面重构。主要内容为PC端网站布…...

    2024/4/24 21:28:45
  20. python数据库查询返回类型默认是元组,改为返回字典类型

    fetchall()将结果放在二维数组里面,每一行的结果在元组里面。在建立游标的时候加个参数,cursor=pymysql.cursors.DictCursor,返回结果就可以放到字典里面了import MySQLdb from DBUtils.PooledDB import PooledDB def testDb():conn = PooledDB(MySQLdb, 5, host=localhost,…...

    2024/5/5 13:25:13

最新文章

  1. 一文读懂Vue生命周期(Vue2)

    一文读懂Vue生命周期&#xff08;Vue2&#xff09; 目录 一文读懂Vue生命周期&#xff08;Vue2&#xff09;1 前言2 Vue生命周期2.1 基本生命周期2.1.1 8个生命周期2.1.2 案例 2.2 组件生命周期2.2.1 父子生命周期2.2.2 案例 2.3 keep-alive生命周期2.3.1 案例 2.4 其他 3 总结…...

    2024/5/7 1:24:39
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/6 9:38:23
  3. vscode为什么设置不了中文?

    VSCode中文插件安装 在VSCode中设置中文的首要步骤是安装“Chinese (Simplified) Language Pack for Visual Studio Code”扩展插件。这一过程十分简单&#xff0c;只需打开VSCode&#xff0c;进入扩展市场&#xff0c;搜索“ Chinese (Simplified) Language Pack ”然后点击…...

    2024/5/7 0:36:18
  4. k8s_入门_kubelet安装

    安装 在大致了解了一些k8s的基本概念之后&#xff0c;我们实际部署一个k8s集群&#xff0c;做进一步的了解 1. 裸机安装 采用三台机器&#xff0c;一台机器为Master&#xff08;控制面板组件&#xff09;两台机器为Node&#xff08;工作节点&#xff09; 机器的准备有两种方式…...

    2024/5/4 14:33:56
  5. 最新AI智能系统ChatGPT网站源码V6.3版本,GPTs、AI绘画、AI换脸、垫图混图+(SparkAi系统搭建部署教程文档)

    一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持GPT…...

    2024/5/7 0:27:49
  6. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/5/6 18:23:10
  7. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/5/6 18:40:38
  8. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/5/6 23:37:19
  9. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/5/6 7:24:07
  10. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/5/7 0:32:52
  11. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/5/6 6:01:13
  12. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/5/6 7:24:06
  13. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/5/6 1:08:53
  14. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/5/6 20:04:22
  15. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/5/7 0:32:51
  16. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/5/6 7:24:04
  17. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/5/6 7:24:04
  18. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/5/6 19:38:16
  19. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/5/6 7:24:03
  20. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/5/7 0:32:49
  21. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/5/6 21:25:34
  22. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/5/6 7:24:02
  23. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/5/6 7:24:01
  24. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/5/7 0:32:47
  25. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/5/6 16:50:57
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57