首页 > 编程语言 >Python相关

Python相关

时间:2023-08-24 10:57:23浏览次数:32  
标签:__ 函数 Python 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参数里写上我们自定义的元类即可。

标签:__,函数,Python,python,对象,单例,相关,装饰
From: https://www.cnblogs.com/chiyun/p/17653601.html

相关文章

  • Python-PyMySQL的一些使用注意事项
    一、关于groupby的使用在部分mysql版本(5.7.xx及以上)中,若select的列中,包含了未被groupby的字段,会报以下错误:[Err]1055-Expression#1ofORDERBYclauseisnotinGROUPBYclauseandcontainsnonaggregatedcolumn'xxxx'whichisnotfunctionallydependentoncolu......
  • Python Web:Django、Flask和FastAPI框架对比
    Django、Flask和FastAPI是PythonWeb框架中的三个主要代表。这些框架都有着各自的优点和缺点,适合不同类型和规模的应用程序。Django:Django是一个全功能的Web框架,它提供了很多内置的应用程序和工具,使得开发Web应用程序更加容易。Django采用了MTV(模型-模板-视图)设计模式,提供ORM......
  • Python-大文件上传requests-toolbelt
    一、简介requests.post发送文件的方式是把所有文件读取内存中,再构建请求发送出去。当发送大文件时候(好几个G)就会导致内存不足OOM默认使用的requests.post较难做到分段文件发送(大概思路:先计算原文件md5,再切分文件发送,到接收端组合再计算md5,较麻烦不推荐,可参考:Python之requests模......
  • Python-保存request请求为各种文件
    文件下载相关工具importjsonimportrequestsclassCustomFileTools(object):defdownload_json_file(self,json_url,save_path):"""下载json文件并保存"""json_req=requests.get(json_url)ifjso......
  • python中的 “__name__”属性
       在python中,每个脚本文件都会有自己的__name__属性。在单独运行一个脚本时,name属性会被赋值为__main__,这并不是说当前脚本名字叫main,这个值表示当前脚本是主函数。      如果现在有一个test1脚本和test2脚本。单独运行test1脚本时,这个属性就会被赋......
  • Python-Flask配置https证书
    零、问题错误:SSLVersion2and3ProtocolDetection一、说明1、通过使用flask框架配置https证书进行HTTPs证书配置后会被扫描到漏洞,漏洞描述如下:远程服务接受使用SSL2.0和/或SSL3.0加密的连接。这些版本的SSL受到多个加密缺陷的影响,包括:-带CBCCiphers的不安全的填充方案。......
  • 《流畅的python》— 列表推导与生成器表达式
    列表推导是构建列表(list)的快捷方式,而生成器表达式则可以用来创建其他任何类型的序列。如果你的代码里并不经常使用它们,那么很可能你错过了许多写出可读性更好且更高效的代码的机会。很多Python程序员都把列表推导(listcomprehension)简称为listcomps,生成器表达式(generatorexpre......
  • python-flask小结
    1.flask和django区别1.flask是一个轻量级的,django是一个重量级的,包含了很多组件,包括admin,orm等,flask虽然没有但可以引入第三方组件。2.flask是基于上下文管理做的一个应用上下文appcontext和请求上下文requestcontext管理。django只是通过参数传递。2.flask生命周期......
  • 与.html相关的文件
    与.html相关的文件有HTML文件(.html或.htm)、CSS文件(.css)、JavaScript文件(.js)、图像文件(.jpg、.png、.gif等)、样式表文件(.scss、.less)、字体文件(.ttf、.otf、.woff等)、音频文件(.mp3、.wav)、视频文件(.mp4、.avi)、网页图标文件(.ico)等HTML文件HTML文件是一种文本文件,使用HTML(超文本标......
  • python rasa聊天机器人教程六:服务器部署
    1.准备环境:宝塔+nginx+docker首先在服务器上安装好宝塔,然后在宝塔里面安装nginx+docker2.创建站点宝塔站点里面创建一个站点 3.上传rasa项目的代码到站点目录把之前在本地运行正常的rasa项目代码上传到服务器站点目录上4.修改index.html代码修改站点目录下/www/wwwroo......