python进阶
文章平均质量分 73
python进阶操作
go&Python
加油! 唯有努力不会辜负时间
展开
-
Playwright
Playwright 是一个用于自动化浏览器操作的开源工具,由 Microsoft 开发和维护。它支持多种浏览器(包括 Chromium、Firefox 和 WebKit)和多种编程语言(如 Python、JavaScript 和 C#),可以用于测试、爬虫、自动化任务等场景。多浏览器支持:支持所有主流浏览器。这使得开发人员可以根据需求选择最适合的浏览器进行自动化操作。(Playwright不支持旧版Microsoft Edge或IE11)原创 2024-05-08 20:10:26 · 618 阅读 · 0 评论 -
asyncio和 aiohttp
爬虫最重要的模块requests,但它是阻塞式的发起请求,每次请求发起后需阻塞等待其返回响应,不能做其他的事情。本文要介绍的aiohttp可以理解成是和requests对应Python异步网络请求库,它是基于 asyncio 的异步模块,可用于实现异步爬虫,有点就是更快于 requests 的同步爬虫。通过这个案例,可以看到一个问题,那就是 aiohttp的使用,每次都需要写一堆重复代码,并且整个代码结构看起来复杂,作为一个高级开发,必须要会做的就是减少代码重复编写,要将其模块化,封装起来。原创 2024-03-28 22:48:17 · 524 阅读 · 0 评论 -
python walrus操作符
walrus操作符 作为一个新特性,目前看来,个人感觉用处不算多,虽然能少量减少代码量,但是不建议过度使用,用来尝鲜还不错。它可以在表达式中同时进行赋值和比较操作,可以使代码更加简洁和易读。需要注意的是,Walrus 操作符虽然方便,但是过度使用会导致代码难以理解和维护,因此需要谨慎使用。在 while 循环中,可以使用 Walrus 操作符来避免重复计算。在列表推导式中,可以使用 Walrus 操作符来避免重复计算。在条件表达式中,可以使用 Walrus 操作符来避免重复计算。变量,并在同一行中检查。原创 2023-10-30 11:35:34 · 174 阅读 · 0 评论 -
python 属性访问器 (property)
在上面的代码中,我们使用了装饰器的方式来创建属性访问器。@property装饰器实际上是getter方法的快捷方式,在类定义中定义一个属性方法,并将其装饰为@property,这样就可以像访问普通属性一样访问该方法,相当于使用了属性访问器,可读性更好。装饰器实际上是setter方法的快捷方式,用于为属性方法添加一个 setter 方法,并返回属性本身。装饰器实际上是deleter方法的快捷方式,用于为属性方法添加一个 deleter 方法,并返回属性本身。使用property()原创 2023-06-09 22:03:11 · 666 阅读 · 1 评论 -
PyMuPDF 库使用
能够用来对PDF文档进行操作的Python包有好几个,如用于提取内容的PdfPlumber、PDFMiner,可以用来对PDF文件进行修改操作的PyPDF2等等,如果只是需要简单地对PDF文件实现合并、拆分、书签操作,使用PyPDF2就足以满足。但如果想对PDF文件进行一些底层操作,基本上只有PyMuPDF了。原创 2023-05-24 18:13:09 · 669 阅读 · 0 评论 -
python 魔法方法
str函数或者print函数调用的是obj.__ str__ ()repr函数或者交互式解释器调用的是obj.__ repr__()注意:如果__ str__ 没有被定义,那么就会使用 __ repr__ 来代替输出。__ str__ 和 __ repr__ 方法的返回值都必须是字符串。原创 2023-03-02 09:53:01 · 148 阅读 · 0 评论 -
Marshmallow 库
marshmallow是一个用来将复杂的orm对象与python原生数据类型之间相互转换的库,简而言之,就是实现object -> dict, objects -> list, string -> dict 和 string -> list。序列化:序列化的意思是将数据对象转化为可存储或可传输的数据类型 反序列化:将可存储或可传输的数据类型转化为数据对象demo"name" , "age" }) 参数可以 在实例化 sechema 对象时配置,也可以在使用序列化 / 反序列化时 传入参数名。原创 2023-02-27 15:43:52 · 455 阅读 · 0 评论 -
typing库
在日常代码编写中,由于python语言特性,不用像go等编译性语言一样,在定义函数时就规范参数和放回值的类型。但是,有时候函数接受的参数是列表,里面数据需要全是float类型,这个时候该咋办呢?因此官方推出了typing库,typing 库是python 提供用来类型标注支持的工具库。可以用来规范开发过程中的规范,可被用于第三方工具,比如类型检查器、集成开发环境、静态检查器等。Python 在运行时并不强制标注函数和变量类型。原创 2023-02-25 16:21:50 · 1525 阅读 · 1 评论 -
python 魔法方法之 __ slots __
当你事先知道class的attributes的时候,建议使用slots来节省memory以及获得更快的attribute access。是python class的一个特殊attribute,能够节省内存空间。正常情况下,一个类的属性是以字典的形式来管理, 每个类都会有。来将类的属性构造成一个静态的数据结构来管理,里面存储的是 value references。的原因,可以使用装饰器以及反射的方式来实现属性控制。节约内存,又实现新属性的定义。的一个属性,实现既能通过定义。之外的新属性作为使用。原创 2023-02-24 20:20:43 · 559 阅读 · 0 评论 -
手撸ORM
ORM 即 Object Relational Mapping 对象关系映射当我们需要对数据库进行操作时,势必需要通过连接数据,调用sql 语句、执行sql语句等操作,ORM将数据中的表,字段,行与面向对象编程的类及其方法,属性等一一对应,即该部分操作封装起来,开发时不需要懂sql语句即可完成对数据库的操作。对象存储属性实际上就是用 dict 类型进行存储。所有的对象都有 __ dict __ 方法。原创 2023-02-03 15:54:04 · 677 阅读 · 0 评论 -
python 字典底层实现原理
将所有哈希地址为i的元素构成一个称为同义词链的单链表,并将单链表的头指针存在哈希表的第i个单元中,因而查找、插入和删除主要在同义词链中进行。表,可以把哈希表看成一个列表,哈希表中的每一个元素又存储了哈希值(hash)、键(key)、值(value)3个元素。python字典 和 go map的查询、添加、删除的平均时间复杂度都是O(1),性能比列表,元组等更加优秀。解决哈希冲突的方法一般有:开放寻址法、链地址法(拉链法)、再哈希法、建立公共溢出区等方法。两部分,凡是和基本表发生冲突的元素,一律填入溢出表。原创 2022-10-24 16:49:15 · 698 阅读 · 0 评论 -
python RPC框架
RPC 是指 远程过程调用, 简单点说就是 两台服务器 A,B 一个应用部署在 A 服务器上,想要调用 B 服务器上应用提供的函数或方法, 由于不在一个内存空间,不能直接调用。需要通过网络来表达调用的语义 和 传达调用的数据, 放回的结果。...原创 2022-08-26 17:29:28 · 3387 阅读 · 0 评论 -
10分钟带你掌握xpath解析器
文章目录xpath解析器1. 什么是xpath2. xpath语法3. xpath解析器详细使用xpath解析器1. 什么是xpathXPath 使用路径表达式在 HTML/XML 文档中进行导航XPath 包含一个标准函数库XPath 是 XSLT 中的主要元素XPath 是一个 W3C 标准简而言之,xpath是在HTML/xml文档中,根据路径查找元素的语法。(效率很高,应用很广)2. xpath语法基础节点选择语法是啥?在xpath中/绝对路径 隔开节原创 2022-02-15 22:41:54 · 422 阅读 · 0 评论 -
10分钟带你玩转openpyxl
文章目录openpyxl模块openpyxl介绍openpyxl使用1. 下载openpyxl模块2. 创建文件3. 写数据4. 读数据openpyxl模块openpyxl介绍openpyxl模块是最近几年比较流行的用python操作xlsl表格的模块,除此之外还有xlrd(xlrd控制读文件),wlwt等模块(wlwt控制写文件)注意:excel文件后缀名针对版本不同是不同的,主要的是03年之前(.xls),03年之后的(.xlsx),openpyxl针对03版本之前的兼容性可能原创 2022-02-14 21:32:05 · 2070 阅读 · 1 评论 -
python协程与IO模型
文章目录协程与IO模型协程理论与实现知识点回顾协程核心代码实现(gevent模块)IO模型简介四种IO模型介绍**1. BIO – 阻塞模式I/O****2. NIO – 非阻塞模式I/O****3. IO Multiplexing - I/O多路复用模型****4. AIO – 异步I/O模型**协程与IO模型协程理论与实现协程与进程和线程不同,进程和线程存在于操作系统中,进程是资源分配的最小单位,线程是CPU的最小工作单位。协程不存在于操作系统中,是纯粹由程序员通过代码实现的。并且不管我们原创 2022-01-21 21:56:44 · 470 阅读 · 0 评论 -
python进程池与线程池
文章目录python进程池与线程池思考简介进程池与线程池基本使用concurrent.futures 介绍基本方法使用示例python进程池与线程池思考能否无限制的开设进程或者线程?1.单从技术层面来说,无限开设进程或线程是肯定可以的,并且这样也是最高效的2.但是,由于硬件的原因,这个是实现不了的(毕竟硬件的发展永远都赶不上软件的发展速度),因此,就目前而言,肯定是不可以实现无限制开设进程或者线程简介池是什么?池是为了在保证计算机硬件安全的情况下提升程序运行效率的工具进程池:原创 2022-01-21 20:40:56 · 1059 阅读 · 0 评论 -
python之GIL全局解释器锁与死锁现象
文章目录GIL全局解释器锁与死锁现象GIL简介GIL的作用总结扩展阅读验证GIL的存在IO密集型与计算密集型IO密集型计算密集型死锁现象死锁现象的解决方法python多线程是否有用IO密集型演示计算密集型演示GIL全局解释器锁与死锁现象GIL简介在Python中,可以通过多进程、多线程和多协程来实现多任务。 在多线程的实现过程中,为了避免出现资源竞争问题,可以使用互斥锁来使线程同步(按顺序)执行。而GIL(Global Interperter Lock),称为全局解释器锁,本质上就是一个内置互斥锁原创 2022-01-20 19:24:41 · 945 阅读 · 0 评论 -
Python并发编程2
Python并发编程21. 僵尸进程与孤儿进程僵尸进程指进程代码运行结束之后并没有直接结束而是需要等待回收子进程资源才能结束孤儿进程即主进程已经死亡(非正常)但是子进程还在运行,操作系统中通常都有会回收孤儿进程的机制2. 守护进程守护进程即守护着某个进程,一旦这个进程结束那么也随之结束。设置守护进程一定要在进程启动之前对其进行设置。from multiprocessing import Processimport timedef test(name):原创 2022-01-14 19:57:32 · 325 阅读 · 0 评论 -
Python并发编程
文章目录并发编程1. 操作系统的发展史2. 多道技术3. 进程理论4. 创建进程5. 进程的join方法6. 进程间默认无法交互并发编程1. 操作系统的发展史学习并发编程其实就是在学习操作系统的发展史(底层逻辑),计算机操作系统经历过以下三种时代穿孔卡片时代 CPU的利用率极低联机批处理系统 将多个程序员的程序一次性录入磁带中,之后交由输入机输入并由CPU执行脱机批处理系统 现在计算机的雏形(远程输入 高速磁带 主机)2.原创 2022-01-13 22:05:28 · 435 阅读 · 0 评论 -
网络编程实操
文章目录网络编程实操socket 套接字编程通信循环以及代码优化黏包现象黏包现象产生的原因黏包现象的解决办法案例: 局域网内实现文件上传下载server 端client 端common 公用部分扩展知识网络编程实操socket 套接字编程socket 默认基于TCP协议,tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端只要涉及到远程数据交互必须要操作OSI七层,简单代码如下:服务端server = socket.socket() # 默认就是基于网络的TCP传原创 2022-01-13 18:35:47 · 923 阅读 · 0 评论 -
isinstance和issubclass
一、isinstance与type在游戏项目中,我们会在每个接口验证客户端传过来的参数类型,如果验证不通过,返回给客户端“参数错误”错误码。这样做不但便于调试,而且增加健壮性。因为客户端是可以作弊的,不要轻易相信客户端传过来的参数。验证类型用type函数,非常好用,比如print(type('foo') == str) # Trueprint(type(2.3) in (int, float)) # True既然有了type()来判断类型,为什么还有isinstance()呢?一个明显原创 2021-12-18 16:28:04 · 250 阅读 · 0 评论 -
python之面向对象编程
文章目录面向对象编程什么是面向对象为什么要用面向对象怎么用面向对象类的定义和对象的产生1.怎么定义类2.定义类时,发生了什么3.对象的产生对象的属性属性的查找顺序面向对象编程什么是面向对象1. 什么是对象? 在程序中: 函数: 是存放数据的容器,一个函数就是一个功能 对象: 是盛放数据和功能的容器为什么要用面向对象在前面学习的面向过程中,我们知道了,面向过程编程具有一定的局限性,虽然能够使得复杂的问题流程化,进而简单化。但是其扩展性差,可维护性差.不能适用于对于扩展性要求较高的地方原创 2021-12-02 15:33:17 · 312 阅读 · 0 评论 -
python之面向对象进阶
文章目录1.类的继承1.1 什么是继承1.2 为什么要用继承1.3 如何使用继承2. 类的分类2.1 新式类2.2 经典类3. 继承与抽象4. 继承后对象查找属性的顺序4.1 单继承查找顺序4.2 多继承查找循序4.2.1 非菱形继承问题4.2.2 菱形继承下查找顺序5. 派生与mro列表5.1 派生5.1.1 类调用5.1.2 super()方法5.2 MRO列表6. 多态与多态性6.1. 多态1.类的继承1.1 什么是继承继承就是新建类的一种方式, 新建的类我们称为子类或者叫做派生原创 2021-12-06 16:52:03 · 509 阅读 · 0 评论 -
面向过程编程与模块
文章目录面向过程编程模块简介import句式from…import…句式导入补充判断文件类型循环导入问题解决办法模块的查找循序面向过程编程什么是面向过程编程?简单点说,面向过程编程就类似于工厂的流水线以用户注册为例1. 获取用户名和密码2. 组织成固定的格式3. 文件操作写入文件def user_data(): username = input('username>>>:').strip() password = input('password原创 2021-11-23 16:19:59 · 327 阅读 · 0 评论 -
python之面向对象(2)
绑定方法与静态方法文章目录绑定方法与静态方法绑定方法静态方法隐藏属性property装饰器绑定方法绑定方法有两种: 1. 绑定给对象 class Student(): def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender # 绑定给对象的方法, 对象来调用, 会把自己原创 2021-12-03 16:42:17 · 521 阅读 · 0 评论 -
python之面向对象高级
文章目录组合怎么使用组合面向对象的内置函数反射组合组合: 就是一个对象拥有一个属性, 该属性的值是另外一个对象组合的作用: 另一种解决类与类之间的代码冗余问题 为什么要用组合? 因为继承: 是满足什么是什么的关系, is—a的关系 所以继承的使用是有一定的限制的,并且继承是一把双刃剑,并不是继承的越多就越好eg: class People(): school = 'SH def __init__(self, name, age, gender原创 2021-12-07 15:31:37 · 703 阅读 · 0 评论 -
网络编程理论
网络编程理论软件开发架构软件开发架构分为c/s架构和b/s架构两种c/s架构c:client 客户端s:server 服务端 客户端就是平常下载的各种软件APP 服务端需要具备的三大特征 1.24小时不间断提供服务(24小时监听) 2.固定的地址(IP地址) 3.能够服务多个用户(高并发)b/s架构b:browser 浏览器s:server 服务器 浏览器统一充当各个服务端的客户端本质:bs架构本质上也是cs架构 网络编程前原创 2022-01-11 16:54:33 · 476 阅读 · 0 评论