之前有简单讲了下命名元组,现在联系数据类再做比较下 目前发现,因为数据类和普通的类没什么差异,只是提供了简写__init__的语法糖,而且增加了类型注解,可以随意修改属性值 而命名元组无法修改,除非返回一个新的实例 1importdataclasses 2 3 4@dataclasses.dataclass() 5classValley: 6name:str 7age:int=16 8 9 10v=Valley(name="g") 11print(v) 12可重新赋值 13v.age=26 14print(v) 也可以冻结字段禁止二次赋值 fromtypingimportN...
不久之前看过《python工匠》,腾讯大佬朱磊写的,后来一段时间零零散散也会翻开看看,强烈推荐!!! 1、变量注释 变量与注释是最接近自然语言的东西,把变量与注释搞好,同样一段代码,却带来两种截然不同的体验 1.1、变量开辟的必要性 1.2、变量注意靠近使用 1.3、注意变量描述性要强、同时注意其长度 1.4、变量的命名要突出类型 1.5、注释不是代码的翻译,要传达代码无法传达的信息(eg:这一段为什么要这么写) 1.6、先写注释,后写代码 1.7、注释最好不要用于屏蔽代码,已屏蔽的只会增加阅读负担 2、数值字符串 2.1、字符的分割 2....
接上文 4、条件分支控制流 避免分支嵌套,异常放在代码片段最前面 4.1、归约函数 4.2、条件表达式的封装避免过长而导致可读性下降 4.3、德摩根定律 4.4、and、or优先级 4.5、or短路效应 4.6、消失的分支 4.6.1、二分查找算法 4.6.2、字典算法 5、异常错误处理 无需多言 6、循环、可迭代对象 6.1、按职责拆分循环体代码 6.2、管道函数(函数式编程)取代循环 6.3、迭代器和可迭代对象是完全两个不同的概念 6.4、搞懂iter()、next()
接上文 7、函数 7.1、长度 7.2、圈复杂度 7.3、函数内代码确保处在同一抽象层内,主流程清晰,不存在穿插的分支 7.4、有状态的函数 7.4.1、全局变量 7.4.2、闭包函数 7.4.3、类 比较偏向于后两者 8、装饰器 装饰器和装饰器模式是两个完全不同的概念 1、三方模块wrapt的引入 9、OOP 9.1、多态、鸭子类型 9.2、抽象类的子类化机制 9.3、元类的某些场景下的替代者,钩子函数 9.4、继承是一把双刃剑(多组合少继承)、混合类的使用 后面还有几个章节是讲...
fastapi是一个高性能的web开发框架 性能极高,可与NodeJS,Go媲美。(得益于Starlette和Pydantic)。 Starlette是一个轻量级ASGI框架/工具包。它非常适合用来构建高性能的asyncio服务,并支持HTTP和WebSockets。 官方网址:https://www.starlette.io/ Pydantic是一个使用Python类型提示来进行数据验证和设置管理的库。Pydantic定义数据应该如何使用纯Python规范用并进行验证。 官方网址:https://pydantic-docs.helpmanual.io/ 开山......
对类中属性访问,并修改他的行为 可以直接使用类装饰器 """ 类装饰器扩展 类功能 """ deflog_getattribute(cls): old_getattribute=cls.__getattribute__ defnew_getattribute(self,name): print("getting",name) returnold_getattribute(self,name) cls.__getattribute__=new_getattribute returncls @log_getattribute classValley: def__init__(se...
对某个属性进行访问的时候,不需要经过反复的计算再返回 对属性的首次访问,将其值缓存起来,在其后的访问中,直接从缓存中取值,主要用来提高程序的性能 """ 属性惰性求值 这里介入描述符就可以实现 """ classLazyProperty: def__init__(self,func): self.func=func def__get__(self,instance,owner): ifinstanceisNone: returnself value=self.func(instance) setattr(instance,self.func.__name__,value) retu...
1-coding:utf-8-- 2""" 3@Time:2023-06-2523:14 4@Description: 5@Author:Mr.Gu 6""" 7importtime 8importtypes 9 10 11classMeta(type): 12def__new__(cls,name,bases,attrs): 13forkey,valueinattrs.items(): 14ifisinstance(value,types.FunctionType)andnotkey.startswith("_"): 15attrs[key]=property(value) 16retur...
定义抽象基类,规范接口内部方法执行顺序 在进阶篇中,没专门提过抽象基类,在这里顺便就提一下 抽象基类的核心特征:不能被直接实例化(除非所有的抽象方法都被实现) 相反,抽象基类和元类一样,一般都被当做顶层基类使用,派生类必须实现抽象类中指定的方法,且方法名也必须保持一致 抽象基类的主要用途:从一种高层次上规范编程接口 话不多说,直接上代码 1importabc 2 3 4classTemplate(metaclass=abc.ABCMeta): 5@abc.abstractmethod 6defpre(self): 7... 8 9@abc.abstractmethod 10def...
观察者模式也可以理解为:发布订阅模式 发布者状态更新,通过管道接口实现订阅者动态更新 1classMiddleware: 2""" 3发布者和订阅者交互类 40、订阅者容器列表 51、包括订阅者的增加、删除 62、通过管道通知订阅者 7""" 8 9def__init__(self): 10self.subscribes=list() 11 12defattach(self,obs): 13self.subscribes.extend(obs) 14 15defdetach(self,obs): 16self.subscribes.remove(obs) 17 18defnotify(s...
作为计算机毕业的我,说起来惭愧,大学时候很多重要的专业课都没好好听过,庆幸的是,大学的很多教师课件我都有保存下来。这几天,把《操作系统》拿起来看看,然后涉及到一些我认为重要的理论知识我会在这个专题都会记录下来,这将会是一个持续的过程。 1、操作系统的目标 2、操作系统的作用 其中:四类资源是:处理器、存储器、IO设备、信息 3、操作系统(OS)作为用户与硬件系统交互的接口,示意图如下 4、操作系统发展过程 无操作系统的计算机系统 单道批处理系统 多道批处理系统 分时系统 实时系...
1、进程结构特征: >>进程控制块的作用: 动态性 进程最基本的特征是动态性 进程的生命周期 进程由创建而产生,由调度而执行,由撤销而消亡的过程 并发性 独立性 异步性 2、进程的三种基本状态 就绪状态 执行状态 阻塞状态
1、死锁的概念 2、产生死锁的原因 3、产生死锁的必要条件 互斥条件 请求和保持条件 不剥夺条件 环路等待条件
1、内连接 语法: SELECT查询字段1,查询字段2,...FROM表1[INNER]JOIN表2ON表1.关系字段=表2.关系字段 准备数据 -若存在数据库mydb则删除 DROPDATABASEIFEXISTSmydb; -创建数据库mydb CREATEDATABASEmydb; -选择数据库mydb USEmydb; -创建部门表 CREATETABLEdepartment( didint(4)NOTNULLPRIMARYKEY, dnamevarchar(20) ); -创建员工表 CREATETABLEemployee( eidint(4)NOTNULLPRIM...
ACID :如果一个数据库支持事务的操作,那么该数据库必须要具备以下四个特性 1、原子性(Atomicity) 事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响 2、一致性(Consistency) 事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。 拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000 3、隔离性(Isolation) 隔离...