随笔分类 - Python
摘要:Python 线程和进程和协程总结 线程和进程和协程 进程 进程是程序执行时的一个实例,是担当分配系统资源(CPU时间、内存等)的基本单位;进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响;进程间可以通过信号、信号量、共享内存、管道、队列等来进行通信;进程创建、销毁、上下文切
阅读全文
摘要:Scrapy框架解析 Scrapy框架大致包括以下几个组件:Scrapy Engine、Spiders、Scheduler、Item Pipeline、Downloader; 组件 Scrapy Engine 这是框架的核心,负责控制数据流在整个系统的各个组件间的流动过程,并且在特定动作发生时触发相
阅读全文
摘要:Python风格规范 整理自Google开源项目指南 分号 行长度 不要使用反斜杠连接行,可以使用圆括号来连接; # True x = ('This will build a very long long ' 'long long long long long long string') URL可以
阅读全文
摘要:多线程库总结 基于线程的并行性 threading模块 下面是一些基础函数,函数包括: threading模块一共提供的类包括:local、Thread、Lock、RLock、Condition、Semaphore、Event、Time 1. Thead-Local Data 专门用来管理线程局部的
阅读全文
摘要:web框架总结 前提 一个web框架需要包含的组件或者功能有: wsgi 首先要了解WSGI的相关知识,如下: web server:指的是软件程序,它从客户端接受请求,然后返回一个Response,需要注意的是它不创建Response,web app才是创建Response的主体。web app:
阅读全文
摘要:装饰器总结 前提 使用装饰器的前提在于Python提供的特性: 可以通过一个例子来了解: def get_animal(name='dog'): def dog(): return 'this is a dog' def cat(): return 'this is a cat' # 返回函数对象
阅读全文
摘要:Python 协程总结 理解 协程,又称为微线程,看上去像是子程序,但是它和子程序又不太一样,它在执行的过程中,可以在中断当前的子程序后去执行别的子程序,再返回来执行之前的子程序,但是它的相关信息还是之前的。 优点: 如果要充分利用CPU多核,可以通过使用多进程+协程的方式 使用 打开asyncio
阅读全文
摘要:Python 内存管理机制和垃圾回收机制 内存管理 Python中的内存管理机制的层次结构提供了4层,其中最底层则是C运行的malloc和free接口,往上的三层才是由Python实现并且维护的。 第一层则是在第0层的基础之上对其提供的接口进行了统一的封装,这是因为虽然不同的操作系统都提供标准定义的
阅读全文
摘要:不会做 1. Path Sum class Solution(object): def hasPathSum(self, root, sum): """ :type root: TreeNode :type sum: int :rtype: bool """ if root is None: ret
阅读全文
摘要:不会做 1. Smallest Range 这道题我一开始的想法是错误的,以为是求由数组中的所有数字中构成的最小区间,但是因为没有考虑到无法保证这个区间包含了所有的子数组中的至少一个元素,所以错误,同时还因为不断的缩小范围,最后发现计算出来的和答案完全是两个不交集的区间,原因在于你缩小的是整体的区间
阅读全文
摘要:优化 Increasing Subsequences 题意:找出数组里面生序的子序列(按顺序) 这道题我一开始想到的就是DFS,先选择数组的一个值,作为跟,然后往数组下面进行递归,思路不错,但是TLE。 class Solution(object): def findSubsequences(sel
阅读全文
摘要:不会做 1. Search in Rotated Sorted Array 这道题的目的不在于解决它,而是如何更快的解决,这要求更低的时间复杂度,因此任何时间复杂度为n的方案应该都要被否决掉,只有n/2的解决方案才能被留下来。 这题不能简单的用二分查找的方式来做,因为它并不知道那个旋转的点在哪,因此
阅读全文
摘要:不同的做法 优化 1. 546. Remove Boxes 这是一开始的做法,直接用DFS来做,显然TLE class Solution(object): result = 0 def recursive(self, boxes, cur): l = len(boxes) if l == 0: if
阅读全文
摘要:不同的做法 1. 56. Merge Intervals 这是我的做法,AC,通过反向删除intervals中的值实现,注意在删除的时候删除前面那个,这样数组重新排序后,数组仍然会从最后一位和前面的比较进行比较。如果要反向的话,需要按照后者进行排序。 class Solution(object):
阅读全文
摘要:算法不扎实: 1. Minimum Absolute Difference in BST 我一开始的想法是递归的计算和当前结点的左右子结点的值的difference,发现是没有理解题意,题目中说的是任意的两个结点的差的绝对值,而不是相连的结点。特别坑的是,因为是BST,那么就会存在根结点的左子树的最
阅读全文
摘要:Python不熟悉 1. Reverse Words in a String III 这道题目我做出来了,但是我使用C语言的思想去做的,但是Python提供了reverse和map函数都可以实现; 我的实现: def reverseWords(s): """ :type s: str :rtype:
阅读全文
摘要:Python不熟悉 不同的做法 404. Sum of Left Leaves 这是我的做法,AC。 class Solution(object): res = 0 def recursive(self, root): if root == None: return if root.left !=
阅读全文
摘要:Python collections模块总结 除了我们使用的那些基础的数据结构,还有包括其它的一些模块提供的数据结构,有时甚至比基础的数据结构还要好用。 collections ChainMap 这是一个为多个映射创建单一视图的类字典类型,也就是说,它同样具有字典类型的方法,它比基础数据结构中的字典
阅读全文
摘要:正则表达式总结 正则表达式的语法里面分为字符、预定义字符、数量词、边界匹配、逻辑分组、特殊构造,如图: 先介绍Python中支持正则表达式的re模块中的方法,使用什么函数都大同小异,重要的是正则表达式。 比如说邮箱,我们分析它的结构,其是一个前面为字符和数字组成,中间一个@,跟着字符和数字,后面是.
阅读全文
摘要:第八章总结 8.5. heapq — 堆队列算法 有8个算法 最小堆封装 # 最小堆封装 from heapq import * import pprint class MinHeap: def __init__(self, iterable): self._iteralbe = [] self._
阅读全文