摘要:主角:takewhile 判断序列中元素是否为偶数,奇数则终止 这是我们最常用的一种方式,其实没必要这么复杂 1 a = [4, 6, 7, 3] 2 3 4 def judge_is_even(item): 5 if item % 2 == 0: 6 return True 7 return Fa
阅读全文
摘要:前面说过,委托/代理是一种编程模式 获取属性值重写__getattr__即可 相反修改内部对象的属性值则重写__setattr__ 未完 待续,,,,,,
阅读全文
摘要:基于描述符建立数据模型实现赋值验证框架 在实例属性的获取和设定方面,前面已经提过可以使用property和描述符实现 1、创建数据模型的基础构建模块 1 class Descriptor: 2 def __init__(self, name=None, **opts): 3 self.name =
阅读全文
摘要:实现在返回类实例进行初始化时执行类型检查 这要求: 1 class Valley: 2 def __init__(self, origin_val): 3 # 非_val是为了确保初始化时候也能对属性执行类型检查 4 self.val = origin_val 5 6 @property 7 def
阅读全文
摘要:普通的切片对迭代器无法实行切片操作 1 from itertools import islice 2 3 4 def func(): 5 for i in [4, 9, 6, 2]: 6 if i % 2 == 0: 7 yield i 8 9 10 f = func() 11 res = isli
阅读全文
摘要:多个线程在执行过程中会因为竞争同一个资源而产生线程冲突,造成死锁,从而引出线程锁这个概念 先拿到锁再执行业务操作: 当然我对这一块了解的还不透彻,只是了解在不加锁的多线程情况下,会破坏单例模式,所以就有了下面这一段 1 import time 2 import threading 3 4 5 def
阅读全文
摘要:抽象类:可以作为顶层基类,从高层次规范编程接口 1、在abc模块中,最常见的抽象类有Iterable,我们可以用他判断一个对象是不是可迭代对象 1 from collections.abc import Iterable 2 3 4 class Valley: 5 6 def __iter__(se
阅读全文
摘要:是一种针对有序集合的查找算法 在python中,有一个模块与之密切相关,就是bisect 1 import bisect 2 3 4 def func(): 5 a = [1, 5, 9] 6 bisect.insort(a, 6) 7 return a 8 9 10 if __name__ ==
阅读全文
摘要:继承: 强调类与类之间的关系 组合: 强调对象和对象之间的关系 清楚python支持多继承,从而涉及到一些MRO的点,这里不做赘述,在实际工作过程中,我们经常会使用继承来实现代码复用,如果仅仅是为了复用,还是比较推荐使用组合方式,因为继承方式,使得类与类之间的耦合性变得异常紧密,这多少违背了迪米特法
阅读全文
摘要:作用:随时修改代码 (在函数或类定义完成之后,再去修改函数的实现过程) """类似猴子补丁在函数定义好之后,再去更改他的行为"""import typesclass Valley: def func(self): return "等待宣告"def common(self): return "只有永不
阅读全文
摘要:数据校验的的专业工作请看pydantic 1 from pydantic import BaseModel, conint, ValidationError 2 3 4 class NumVerify(BaseModel): 5 # 限定范围 6 expected_number: conint(ge
阅读全文
摘要:生成器是一种特殊的迭代器,也可以说其父类型是迭代器 1、迭代器其实也有很多点要清楚,这里先不做赘述 2、要清楚,迭代器调用iter()返回的是自身 1 def func(s, e): 2 """ 3 生成器函数 4 :param s:起始值 5 :param e: 末值 6 :return: 7 "
阅读全文
摘要:控制子类的的创建 1、元类 这种方式可能是最常见的也是我们最先知晓的,当然这种方式可能需要我们对元类有比较深入的了解,所以引入了下面的这种方式 2、钩子函数 __init__subclass__,字面意思,父类实现了该双下方法,其后凡是继承他的派生类,都会触发此方法,进行派生类的初始化,实现派生类属
阅读全文
摘要:命题逻辑里的一个法则 定义:非p或非q=非(p且q) 最近在看一本书啊《python工匠......》一个腾讯大佬写的,从这里面了解到这个东西,确实不错 1 1 # 德摩根定律 2 2 def func(): 3 3 a = 10 4 4 b = 20 5 5 if not a < 5 or not
阅读全文
摘要:三大编程思想: POP:面向过程编程(Procedure Oriented Programming) OOP:面向对象编程(Object Oriented Programming) AOP:面向切面编程(Aspect Oriented Programming) 以下大部分内容引用腾讯云一位笔者,我也
阅读全文
摘要:面试现在就职的这家公司时,碰到过这题,反正当时就随便口述了下,也有点迷,现在整理下,就4行代码 方法有很多,这里权且就写下一种实现方式 概念 又叫黄金分割数列、13世纪由意大利数学家提出 实现 1 def func(n): 2 a, b = 0, 1 3 for i in range(n): 4 a
阅读全文
摘要:python一切皆对象,从是否可调用层面讲,对象又可以分为可调用对象、不可调用对象 在本篇中,类中实现__call__双下方法,即将该类的实例变为可调用对象 普通类未实现__call__的方法,实例是不可调用的,先看 1 class Valley: 2 ... 3 4 5 if __name__ =
阅读全文
摘要:首先我们要知道任何关于函数调用签名的问题,都和inspect模块有着关系 这个知识点涉及到两个类: Signature、 Parameter创建一个签名对象,这是个重点 1 from inspect import Signature, Parameter 2 3 params = [Paramete
阅读全文
摘要:方法调用确实我们每个人都会,但是我觉得大家可能用的最多的就是那种常规的方式,这里呢,我要记录一下另外几种方式 1 from operator import attrgetter 2 from operator import methodcaller 3 4 5 class Valley: 6 def
阅读全文
摘要:在类的层次上定义时,python给实例采用一种更加紧凑的内部表示来管理属性,而非字典,这样,我们只被允许访问__slots__内部的属性 这样定义会带来两点好处,然后具体的实践我在工作中目前运用的还很少,后面如果发现还有什么坑,我再来补充 1、创建大量实例时节省内存 2、访问属性快 1 class
阅读全文