Python相关

python-内置函数

内置函数是python预先定义的函数,这些函数可以提高我们的编码效率。常用的比如map,他可以传两个参数,分别是函数和指定的序列,会根据你提供的函数对指定的序列做映射,还比如zip,我们也叫拉链,就是把两个可迭代的对象打包成一个个元组。还有像hash,是获取一个对象的hash值,enumerate,可以把可迭代对象同时列出数据和索引,一般用在for循环里。

python-匿名函数

正常情况我们使用的都是有名函数,就是def关键字定义的函数,匿名函数表示没有名字的函数,用lambda关键字定义,没有名字就意味着这个函数只能使用一次,匿名函数和有名函数一样,也有参数和返回值作用域这些。一般来说匿名函数语法是比较简单的。

python-反射

反射是指在程序运行过程中,对于任意一个对象我们可以调用他的属性和方法。这种动态获取对象属性和调用方法的功能称为反射。

python-单例模式

单例模式是指保证该类只有一个实例化对象,并且提供访问这个对象的方式。单例是一种设计模式,当我们想控制实例对象只有一个来节省资源的时候可以使用。

比如说我们服务器有个配置信息的文件,我们客户端通过一个类来读取内容,如果程序运行的时候很多地方都要用到这个配置文件,就可以用单例。

单例模式还是比较简单的,主要思路都是在内部维护一个属性,用来确定是否已经生成了单例,如果已经生成了就直接返回。python的模块导入是天然的单例,一般够用,还有就是使用类方法实现单例的话,多线程情况下会不安全,单例失效,需要在生成单例的地方加线程锁。

优点:

1、由于单例模式要求在全局内只有一个实例,因而可以节省比较多的内存空间;
2、全局只有一个接入点,可以更好地进行数据同步控制,避免多重占用;
3、单例可长驻内存,减少系统开销。

缺点:

1、单例模式的扩展是比较困难的;
3、单例模式是并发协作软件模块中需要最先完成的,因而其不利于测试;
4、单例模式在某种情况下会导致“资源瓶颈”。

python-装饰器模式

装饰器模式是指动态地给一个对象添加一些额外的职责。当我们需要给很多地方添加同一个功能的时候,我们可以编写一个装饰器,实现不改动原代码,而增加上了新功能。装饰器也是应该比较多的高级方法,比如django框架中zuth组件的login_required,这个装饰器装饰在视图函数之后,若未登录,那么就会进我们的指定页面,登录之后又会自动重定向到之前的页面。还有drf里面自动生成路由之后的action装饰器,可以根据我们填入的参数,根据不同请求方式来查找我们自己写的视图函数。还有一些python的第三方库也是用装饰器的模式,比如调试用的pysnooper。

多个叠加装饰器,加载顺序自下向上,执行顺序从上到下。

优点:

1、装饰器能在不改变调用方式的情况下增加新功能,方便了开发

2、是实现aop的一个方式

缺点:

多层装饰器的调试和维护有比较大的困难。

python-魔术方法-new和init

new和init这两个都是创建对象的魔术方法,new魔术方法触发在init之前,如果自己重写new魔术方法,一般需要返回一个对象,然后叫给init初始化,如果是返回其他类的对象,那么init不会触发,在django的drf模块里的序列化器中,有关于这两个魔术方法我比较深刻的影响,序列化器有many参数,默认情况是False,在他的源码里,BaseSerializer类的new魔术方法里,先把many给pop出来,如果有many参数的话,就走类的实例化,在这个实例化里,返回的就是list_serializer的对象,如果没有many参数,就是正常返回对象,然后在init里初始化。

python-魔术方法-xxxitem

__xxxitem__:使用 ['']的方式操作属性时被调用
    
__setitem__:每当属性被赋值的时候都会调用该方法,因此不能再该方法内赋值 self.name = value 会死循环
__getitem__:当访问不存在的属性时会调用该方法
__delitem__:当删除属性时调用该方法

python-aop

aop全称是面向切面编程,简单来说就是我们在编程的时候,实现当程序运行到某个阶段时,触发我们的方法,就像刀切进去一样。类似装饰器函数,想django中的中间件,form组件里的钩子函数这些都是aop编程的应用,还有比如全局异常捕获等等。在Python中,AOP通过装饰器模式实现更为简洁和方便。

python-GIL

GIL锁是cpython解释器特有的,加在python解释器上的一把互斥锁,每个python线程要运行,都需要获取这个锁,且在python进程中,GIL锁只有一个,所以在cpython中,同一时间只有一个线程在运行,这导致python不能利用多核优势,是大家诟病python慢的主要原因。所以为了解决这个问题,龟叔设计了多进程,在计算密集型任务时,开多进程利用多个cpu。

python-死锁

举个例子来说就是进程或线程1拿到了A锁,等B锁,进程或线程2拿到B锁等A锁,现在就会导致两者都在等。python设计了可重入锁,因为刚才出现的问题是当一个锁被释放之后立刻被人拿走,导致双方都被卡住,那么只要我们设置只有一把锁,且这把锁能被多次获取,在它完全被释放前,谁都不能再获取这把锁。

python-元类

在python里一切皆对象,包括类也是对象,类的类就叫元类,原来继承type。对于一个类来说,组成部分有三个,类名,基类,类体代码。python内置了class,来用创建类,其实就是把这三个部分取出来,然后运行类体代码,然后利用type函数,实例化出来一个类。我们其实也可以不通过class关键字自己实现一个类,就是利用exec和type这两个函数。不过一般来说我们没必要自找麻烦,如果要自定义元类的话,这个自定义元类必须要继承type这个类,在这个自定义元类里我们书写逻辑,控制类的生成,比如说让类的对象一生成时,属性都是私有,或者类必须有注释等等。当我们要使用的时候,在metaclass参数里写上我们自定义的元类即可。

posted @ 2023-08-24 10:46  王寄鱼  阅读(8)  评论(0编辑  收藏  举报