摘要:装饰器有很多功能: 运行时校验、缓存执行结果、注入实参、注册路由等 今天主要说一下注入参数的情况,请看以下时间仓促自己品: 1 import wrapt 2 import random 3 4 5 def test(): 6 @wrapt.decorator 7 def wrapper(func,
阅读全文
摘要:1 # -*- coding: utf-8 -*- 2 """ 3 @Time : 2023-06-25 23:14 4 @Description : 5 @Author : Mr.Gu 6 """ 7 import time 8 import types 9 10 11 class Meta(ty
阅读全文
摘要:对某个属性进行访问的时候,不需要经过反复的计算再返回 对属性的首次访问,将其值缓存起来,在其后的访问中,直接从缓存中取值,主要用来提高程序的性能 """ 属性惰性求值 这里介入描述符就可以实现 """ class LazyProperty: def __init__(self, func): sel
阅读全文
摘要:元类一般作为顶层框架使用 在顶层控制底层派生类方法的命名规范 class Meta(type): def __new__(cls, clsname, bases, clsdict): for name in clsdict: if name.lower() != name: raise TypeEr
阅读全文
摘要:对类中属性访问,并修改他的行为 可以直接使用类装饰器 """ 类装饰器扩展 类功能 """ def log_getattribute(cls): old_getattribute = cls.__getattribute__ def new_getattribute(self, name): pri
阅读全文
摘要:基于类实现装饰器变体 在之前的文章里有提过基于类实现的装饰器,这里做一下延申 import types from functools import wraps class Decorator: def __init__(self, func): wraps(func)(self) self.call
阅读全文
摘要:接上文 7、函数 7.1、长度 7.2、圈复杂度 7.3、函数内代码确保处在同一抽象层内,主流程清晰,不存在穿插的分支 7.4、有状态的函数 7.4.1、全局变量 7.4.2、闭包函数 7.4.3、类 比较偏向于后两者 8、装饰器 装饰器和装饰器模式是两个完全不同的概念 1、三方模块wrapt的引入
阅读全文
摘要:接上文 4、条件分支控制流 避免分支嵌套,异常放在代码片段最前面 4.1、归约函数 4.2、条件表达式的封装避免过长而导致可读性下降 4.3、德摩根定律 4.4、and、or优先级 4.5、or短路效应 4.6、消失的分支 4.6.1、二分查找算法 4.6.2、字典算法 5、异常错误处理 无需多言
阅读全文
摘要:不久之前看过《python工匠》,腾讯大佬朱磊写的,后来一段时间零零散散也会翻开看看,强烈推荐!!! 1、变量注释 变量与注释是最接近自然语言的东西,把变量与注释搞好,同样一段代码,却带来两种截然不同的体验 1.1、变量开辟的必要性 1.2、变量注意靠近使用 1.3、注意变量描述性要强、同时注意其长
阅读全文
摘要:1、多线程情况下为了避免多个线程同时进入临界区(访问某一块代码),对数据进行修改,产生竞态条件 必须要采用同步原语 1.1、锁,利用上下文管理器自动获取释放锁。更容易理解 1.2、信号量,资源消耗进行递减;资源释放进行递增,可以理解为一个计数器 2、线程间通信 队列-queue,实现生产者和消费者的
阅读全文
摘要:之前有简单讲了下命名元组,现在联系数据类再做比较下 目前发现,因为数据类和普通的类没什么差异,只是提供了简写__init__的语法糖,而且增加了类型注解,可以随意修改属性值 而命名元组无法修改,除非返回一个新的实例 1 import dataclasses 2 3 4 @dataclasses.da
阅读全文
摘要:偶然有次机会,看到同事在一串代码上方加了这样一行注释:链式调用。现在才想起来,特意去了解了一下。 方法链:本质是在每个方法末尾都返回实例本身,实现连续自身状态或者行为的访问 1 class Valley: 2 3 @property 4 def name(self): 5 print("g") 6
阅读全文
摘要:1、多线程 1.1、GIL(Global Interpreter Lock)全局解释器锁 其他语言,CPU是多核时,是支持多个线程同时执行,但在python中,无论是单核还是多核,在任意时刻只能有一个线程在执行。其根源是GIL的存在。 GIL:来源是python设计之初,为了数据安全所做的决定。某个
阅读全文
摘要:在后续学习多线程、多进程、协程之前,对一些概念要清楚: 1、进程 资源分配的基本单位,也可以理解为操作系统中正在执行的程序,每个应用程序都有一个自己的进程 特点:对python而言,可以实现真正的并行效果 缺点:进程间切换,开销大,容易消耗CPU资源,进程间通信相对线程来说比较麻烦 一个进程启动时都
阅读全文
摘要:前几天参加了个面试,主要是做数据爬虫这一块的,问了关于python多线程、多进程、协程的问题,很尴尬,知之甚微,所以后面会结合操作系统一些知识开始学习 ......
阅读全文
摘要:平常我们写的都是无状态函数,都是易于理解的 其实我们是可以给函数加状态的:这里给出三种方式,实现有状态的函数 1、全局变量 这是我们最先能想到的,易理解,但其实也是最不提倡的一种方式 2、闭包 相比于全局变量,封装性更好一些,不会污染全局的命名空间 1 def get_num(): 2 num =
阅读全文
摘要:a = ["shi", "xiao", "gu"]def map_func(item: str) -> str: """ 产生新集合 :param item: :return: """ item = "da" if item == "xiao" else item return item# map函
阅读全文
摘要:前一段时间加入到一个项目,里面涉及到的单元测试相对来说比较完善,之前的业务代码压根没涉及到单测,确实惊人 简单了解了下,python有两个单元测试框架:unittest、pytest 后者更强大一些 unittest使用前需要创建一个测试用例集合,必须要继承TestCase 而pytest不需要,还
阅读全文
摘要:代码里我们经常会出现大量的条件判断,在这种情况下,我们可以实现状态机避免过度使用 有一种方式是把各种状态归为各种状态类 还有一种方式是修改实例的__class__属性 1 """ 2 状态机的实现 3 修改实例的__class__属性 4 """ 5 6 7 class Connection: 8
阅读全文
摘要:有三种方式: 全局变量、闭包、类 这里简单看一下闭包怎么实现的 1 """ 2 闭包实现有状态函数 3 """ 4 5 6 def counter(): 7 value = 0 8 9 def wrapper(): 10 # 内部实现修改外部变量 11 nonlocal value 12 value
阅读全文