Python
文章平均质量分 70
HBLQ_GK
做一个健康快乐的程序员!
展开
-
python中的bisect模块的使用
bisectbisect主要用来管理有序序列,注意:一定是“有序”,bisect可以对有序序列进行快速的查找和插入。bisect模块主要包含两个函数:bisect:用来搜索元素位置(元素插入位置)insort:用来插入新元素这两个函数都是使用二分查找算法在有序序列中查找或插入元素,所以执行效率非常高下面将通过一些例子来对比说明bisect的高效率:现在有一个场景:如果我需要插入一个值到一个有序列表中,然后依然保证这个列表的有序,那么如何快速获取需要插入值的位置索引?import bi原创 2021-02-14 18:31:14 · 590 阅读 · 0 评论 -
Python常用特殊方法汇总
一、跟运算符无关的特殊方法1. 实例的创建和销毁__init__解释:构造方法,可调用超类的构造器。这是实例级别的方法,发生在实例创建之后,用于初始化实例,给实例添加一些属性和操作__new__解释:优先于__init__被调用。这是类级别的方法,控制类生成实例的过程,然后通常返回该类的一个实例__del__解释:用于销毁实例化对象,释放内存空间。注:通常情况下,python的垃圾回收机制(引用计数)会自动销毁没用的实例2. 字符串/字节序列表示形式__repr__原创 2021-02-09 16:34:00 · 2668 阅读 · 5 评论 -
Linux下安装virtualenvwrapper
Ubuntu和Centos下安装几乎没有任何区别:第一步:安装virtualenvwrapper命令:pip3 install virtualenvwrapper安装建议使用豆瓣源,即:pip3 install virtualenvwrapper -i https://pypi.douban.com/simple/安装virtualenvwrapper会自动安装virtualenv第...原创 2020-03-07 20:58:48 · 457 阅读 · 0 评论 -
Python的协程
协程的定义和原理:协程,又叫做纤程、微线程。协程的本质上是一个单线程程序,所以协程不能够使用计算机多核资源(但是可以利用多进程+协程实现利用多核资源)。通过记录应用层的上下文栈区,实现在运行中进行上下文跳转,达到可以选择性地运行想要运行的部分,以此提高程序的运行效率。协程的作用:协程能够高效的完成并发任务,占用较少的资源,因此协程的并发量较高。协程的优点:消耗资源少无需切换,...原创 2020-02-28 20:28:25 · 319 阅读 · 0 评论 -
Python多进程和多线程的同步互斥
同步互斥机制:解决了多个进程或者线程对共享资源的争夺,因为某些共享资源在某个时刻可能只允许一个进程对其进行访问。首先需要了解几个概念:临界资源:临界资源就是上面提到的,同时只允许一个进程对其进行访问的资源,即:虽然是共享资源,但是不能多个进程同时对资源进行访问和操作。多进程之间需要遵守某些约定来对临界资源进行访问和操作。临界区:临界区就是我们写的多进程代码中,对临界资源进行操...原创 2020-02-27 16:10:10 · 1006 阅读 · 0 评论 -
Python的多线程
什么是线程:线程也是一种多任务编程方法,可以利用计算机多核资源完成程序的并发执行。线程又被称为轻量级的进程。线程的特征:线程是计算机多核分配的最小单位一个进程可以包含多个线程线程也是一个运行的过程,消耗计算机资源,多个线程共享进程的资源和空间线程的创建删除消耗的资源都要远远小于进程多个线程之间执行互不干扰线程也有自己的特有属性,比如指令集 IDPython中使用threa...原创 2020-02-26 16:56:03 · 211 阅读 · 0 评论 -
Python进程间通信之管道、消息队列、共享内存
由于进程空间相对独立,资源无法共享,基于这种情况,就需要使用一些方法使得不同的进程之间可以进行通信。我这里介绍三种进程间通信的方式:管道、消息队列、共享内存。管道管道的通信原理:在内存中开辟管道空间,生成管道操作对象,多个进程使用"同一个"管道对象进行操作即可实现通信代码实现:from multiprocessing import Process,Pipe#创建管道对象fd1...原创 2020-02-24 20:57:16 · 1536 阅读 · 0 评论 -
Python的进程池
了解了Python的多进程之后,我们会发现,如果有大量任务需要使用多进程来完成,则可能需要频繁的创建删除进程,给计算机带来较多的资源消耗。(多进程的缺点就是会频繁的创建和删除进程,消耗计算机资源)。基于这种情况,于是出现了进程池。进程池的原理:创建适当的进程放入进程池,用来处理待处理事件,处理完毕后进程不销毁,仍然在进程池中等待处理其他事件。进程的复用降低了资源的消耗。举一个通俗易懂的例...原创 2020-02-23 15:58:47 · 345 阅读 · 0 评论 -
Python的多进程
什么是进程:进程是一个动态过程的描述,占有计算机的资源,有一定的生命周期。同一个程序的不同运行过程是不同的进程,占用资源和生命周期都不一样。(分清程序与进程的区别)进程的特征:进程之间运行互不影响,各自独立运行进程是操作系统资源分配的最小单位每个进程空间独立,各自占有一定的虚拟内存多进程的优缺点:优点:可以使用计算机多核,进行任务的并发执行,提高执行效率,空间独立,数据安全,运...原创 2020-02-22 16:06:17 · 204 阅读 · 0 评论 -
解决顺序队列的“假溢出”问题之环形队列(循环队列)——Python实现
队列是一种“先进先出”(FIFO)的数据结构,队列有两端,一边只进,一边只出,即:数据从尾部进入,从头部出来,先进去的就会先出来,就像我们平时食堂打饭排队一样,先去排的先打到饭,后去排的后打到饭。队列通常可以用数组或者是链表实现。这里以数组举例,假设这儿有一个长度为5的数组,左端为头部,负责取出数据,右端为尾部,负责存入数据。从尾部加入数据A再从尾部加入数据B再从尾...原创 2019-11-15 17:20:50 · 4655 阅读 · 1 评论 -
Python实现堆栈(列表结构和链表结构)
堆栈是一种数据项按序排列的数据结构,具有“后进先出”(LIFO)的特点,堆栈所有的操作都在其顶端执行,在顶端进行插入和移除。堆栈好比我们常见的羽毛球盒子,一个圆柱体的羽毛球盒子中从上到下装了很多羽毛球,盒子的开口在顶端,这样,如果先放入盒子的羽毛球就会在盒子的下面,取出时就会后拿到,如果后放入盒子的羽毛球就会在盒子的上面,取出时就会先拿到。 在Python中,实现堆栈有两种方式:...原创 2019-11-14 21:50:21 · 969 阅读 · 0 评论 -
排序算法之插入排序死磕篇(Python实现)
我个人在插入排序的实现上有点晕,有点要懂不懂的感觉,我本着不完全弄明白不罢休的精神,强行来写写插入排序来说服自己。原理说明首先来说说插入排序的原理:插入排序是将列表中的元素逐一与已经排序好的元素进行比较,即每一次都拿一个没有排序的元素,然后插入到已经排了序的元素中去,通过比较,插入在一个合适的位置。比如有一个列表:[ 33, 34, 25, 62, 32 ],要进行升序排列这样...原创 2019-10-26 14:39:47 · 153 阅读 · 0 评论 -
排序算法之冒泡排序、选择排序(Python实现)
一、冒泡排序冒泡排序的原理是:从第一个元素开始,依次和相邻的元素进行比较,如果大小顺序有误,则交换顺序后再和下一个元素比较,如同气泡慢慢从水底升到水面,这样最后一个元素就会是最大(最小)的,这样就完成的第一轮比较,接下来再进行下一轮,下一轮时,也从第一个元素开始,依次比较,这次只用比较到最后一个元素的前一个元素,因为前面已经确认了最后一个元素是最大(最小)的。再进行下一轮,一直循环,这样每经历...原创 2019-10-25 17:58:20 · 466 阅读 · 0 评论 -
Python实现双向链表
之前写的单向链表和环形链表都只是单向的,只能单向遍历,不能根据后面的节点获取前面的节点,除非进行反转操作。双向链表每个节点都有两个指针,这两个指针分别指向前后两个节点,这样就可以从任意一个节点从两个方向获取其他的所有节点,非常方便。但是由于每个节点有两个指针,所以双向链表比较消耗空间。在设计双向链表时,通常会加上一个链表头指针,该链表头指针的数据字段不存放任何数据。双向链表的可以是环形...原创 2019-10-22 18:19:59 · 237 阅读 · 0 评论 -
Python实现环形链表
我们将单向链表的最后一个节点的指针指向链表的头部(第一个节点),那么就形成了一个环形链表。环形节点可以从任意节点开始遍历其他的节点。这里主要实现了环形链表节点的遍历、添加、插入、删除,反转。代码如下:class Player: """节点类""" def __init__(self): """初始化姓名,分数,指针""" self.na...原创 2019-10-20 17:05:28 · 726 阅读 · 0 评论 -
Python实现单向链表
单向链表每个节点都是由两部分组成:数据字段和指针,指针指向下一个元素在内存中的位置。单向链表的第一个节点节点是链表头指针,而最后一个节点的指针设为None,不指向任何元素。(链表头指针相当重要!!!)使用Python实现单向链表,我们可以使用一个节点类来封装节点,每创建一个节点就生成一个节点类的实例。这里主要实现了单向链表节点的遍历、添加、插入、删除,反转。代码如下:clas...原创 2019-10-19 18:40:24 · 208 阅读 · 0 评论