基础知识点
文章平均质量分 72
Chasing__Dreams
这个作者很懒,什么都没留下…
展开
-
python--基础知识点--partial
partial语法:partial(func,*args)很多函数都带有参数,函数在被调用时,我们要把参数传进去。偏函数的作用在于,当出现该函数需要的部分或者全部参数时,可以把这部分参数和函数绑定,到了全部参数出现或者需要被调用的时候,再调用这个函数。from functools import partialdef add(a, b, c): print(a) prin...原创 2019-10-19 19:44:20 · 181 阅读 · 0 评论 -
python--基础知识点--进程、线程、协程的通信方式
在Python中,进程、线程、协程的通信方式也遵循各自的特点和机制。下面我将分别介绍这三种并发执行单位在Python中的通信方式。原创 2024-07-03 15:19:48 · 851 阅读 · 0 评论 -
python--基础知识点--协程
协程由用户态控制,不由内核控制1个线程中可以开很多协程协程切换是在用户态控制不由内核控制,切换时资源开销小使用方式:async def、await+可等待对象(协程对象、Future对象、task对象(是Future对象的子类)->io等待)、事件循环使用场景:可以使用与I/O密集型场景锁的使用:三种场景,[1] 如果协程在操作共享变量的过程中,没有主动放弃执行权(await),也就是没有切换挂起状态,那就不需要加锁,执行过程本身就是安全的,换句话说只要协程中没有await关键字旧不需原创 2024-07-03 12:10:15 · 180 阅读 · 0 评论 -
python--基础知识点--memray
memray 内存分析器介绍原创 2022-09-13 15:15:53 · 1141 阅读 · 0 评论 -
python--基础知识点--91--浏览器通过 WSGI 请求动态资源的过程
浏览器通过 WSGI 请求动态资源的过程WSGI接口uWSGI简述浏览器通过 WSGI 请求动态资源的过程?客户端发出请求以及接收到响应的一个过程。服务端接收到请求后需要做的处理。接收请求、解析请求、业务逻辑的处理、响应请求。web服务器负责接收请求、解析请求、响应请求。应用框架负责业务逻辑的处理。WSGI是实现web服务器与应用框架之间进行通信的协议,也就是接口规范。再详述浏览器通过 WSGI 请求动态资源的过程...原创 2021-05-01 10:08:04 · 216 阅读 · 0 评论 -
python--基础知识点--90--负数存储
print(hex(2))print(hex(-2))print('*' * 30)# python对数据的存储也是使用补码,与c不同的是一个数值占用的字节数是不确定的a = -2 & 0xffffffff # a为-2的补码,从python存储的-2的补码中只截取低位的32位表示-2的32位补码print(a) # 4294967295print(hex(a)) # 0xfffffffeb = ~(a ^ 0xffffffff) # 将-2的32位补码转换为python存.转载 2020-11-02 11:22:18 · 390 阅读 · 1 评论 -
python--基础知识点--heapq
一种著名的数据结构是堆(heap),它是一种优先队列。优先队列让你能够以任意顺序添加对象,并随时(可能是在两次添加对象之间)找出(并删除)最小的元素。相比于列表方法min,这样做的效率要高得多。实际上,Python没有独立的堆类型,而只有一个包含一些堆操作函数的模块。这个模块名为heapq(其中的q表示队列),它包含6个函数,其中前4个与堆操作直接相关。必须使用列表来表示堆对象本身。模块heapq中一些重要的函数函 数描 述heappush(heap, x)将x压入堆中he转载 2020-10-05 08:47:10 · 702 阅读 · 1 评论 -
python--基础知识点--交换赋值(b, c, a = a, b, c)的底层原理
python交换三个值得方法非常简单,即b, c, a = a, b, c,一步操作就交换了,那么这是为什么呢?1. 真相Python的变量并不直接存储值,而只是引用一个内存地址,交换变量时,只是交换了引用的地址。先看下面这段程序:import disdef test(a, b, c): b, c, a = a, b, c return a, b, cif __name__ == '__main__': a = 1 b = 2 c = 3原创 2020-09-15 10:55:16 · 4834 阅读 · 2 评论 -
python--基础知识点--pickle模块
1. 什么是Pickle?您刚刚经历了一个耗时的过程,将一堆数据加载到python对象中。 也许你从数千个网站上爬取了数据。也许你计算了pi的数值。如果您的笔记本电脑电池耗尽或python崩溃,您的信息将丢失。Pickling允许您将python对象保存为硬盘驱动器上的二进制文件。 在你pickle你的对象后,你可以结束你的python会话,重新启动你的计算机,然后再次将你的对象加载到python中。如果需要,您可以将您的pickle文件备份到Google Drive或DropBox或普通的USB存储转载 2020-09-08 21:50:46 · 1043 阅读 · 1 评论 -
python--基础知识点--序列化、反序列化
序列化指将对象(python对象)的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。举例:都玩过游戏么?应该知道游戏有一个存档的功能,我每次不想玩得时候就可以存档,然后再玩得时候我们根本不需要重新开始玩(要是每次都重新玩,估计就没有什么人能有足够的耐心玩游戏了),只需要读档就可以了。我们现在学习的事面向对象的思想,那么在我们眼中不管是我们的游戏角色还是游戏中的怪物、装备等等都可以看成是一个转载 2020-09-08 19:45:54 · 156 阅读 · 0 评论 -
python--基础知识点--json模块
(一)什么是json:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性转载 2020-09-08 18:15:39 · 650 阅读 · 1 评论 -
python--基础知识点--@lru_cache()
一段非常简单代码普通调用方式def console1(a, b): print("进入函数") return (a, b)print(console1(3, 'a'))print(console1(2, 'b'))print(console1(3.0, 'a'))"""运行结果:进入函数(3, 'a')进入函数(2, 'b')进入函数(3.0, 'a')"""使用某个装饰器后接下来我们引入functools模块的lru_cache,python3自带模转载 2020-09-08 10:21:40 · 1893 阅读 · 1 评论 -
python--基础知识点--异常
[学习视频]https://www.bilibili.com/video/BV1g441197MG?p=125转载 2020-09-07 20:38:40 · 75 阅读 · 0 评论 -
python--基础知识点--The Zen of Python
保持简单、追求简单,我想这就是编码之中的禅,一种回归本真的境界。这种禅意在 Python 的设计哲学中体现的淋漓尽致,在 Python 解释器中输入“import this”,便会出现经典的 Python 之禅。Beautiful is better than ugly.优美胜于丑陋。Explicit is better than implicit.显式胜于隐式。Simple is better than complex.简单胜于复杂。Complex is better tha转载 2020-09-07 18:20:39 · 168 阅读 · 0 评论 -
python--基础知识点--itertools模块
前言因为最近事情不是很多,想写一些技术文章分享给大家,同时也对自己一段时间来碎片化接受的知识进行一下梳理,所谓写清楚才能说清楚,说清楚才能想清楚,就是这个道理了。很多人都致力于把Python代码写得更Pythonic,一来更符合规范且容易阅读,二来一般Pythonic的代码在执行上也更有效率。今天就先给大家介绍一下Python的系统库itertools。下面话不多说了,来一起看看详细的介绍吧。itertools库迭代器(生成器)在Python中是一种很常用也很好用的数据结构,比起列表(list)来说转载 2020-09-07 18:01:51 · 160 阅读 · 1 评论 -
python--基础知识点--链式比较
在Python中,你可能会发现这样一个奇怪的现象:>>> 2 == 2 > 1True>>> (2 == 2) > 1False>>> 2 == (2 > 1)False为什么会出现 2==2>1的结果为True?如果说这是运算符的优先级问题,那么后两个式子为什么又都是False?实际上这涉及到了Python的链式对比(ChainedComparisons)。在其他语言中,有一个变量 x,如果要判断x是否大于1,转载 2020-09-04 18:55:26 · 2516 阅读 · 0 评论 -
python--基础知识点--int所占字节长度
以python3版本为例说明, int 类型在python中是动态长度的。因为python3中int类型是长整型,理论支持无限大的数字,但它的结构其实也很简单, 在 longintepr.h 中定义:struct _longobject { PyObject_VAR_HEAD digit ob_digit[1];};这结构是什么意思呢,重点在于 ob_digit 它是一个数组指针。digit 代表的是是python中的 int。python中整型结构中的数组,每个元素最大存储 15原创 2020-09-03 18:37:07 · 4240 阅读 · 0 评论 -
python--基础知识点--array模块
计算机为数组分配一段连续的内存,从而支持对数组随机访问;由于项的地址在编号上是连续的,数组某一项的地址可以通过将两个值相加得出,即将数组的基本地址和项的偏移地址相加。数组的基本地址就是数组的第一项的机器地址。一个项的偏移地址就等于它的索引乘以数组的一个项所需要的内存单元数目的一个常量表示(在python中,这个值总是1)array模块是python中实现的一种高效的数组存储类型。它和list相似,但是所有的数组成员必须是同一种类型,在创建数组的时候,就确定了数组的类型。import array转载 2020-08-16 17:54:36 · 243 阅读 · 0 评论 -
python--基础知识点--StringIO、BytesIO
1. StringIOStringIO的行为与file对象非常像,但它不是磁盘上文件,而是一个内存里的“文件”,我们可以将操作磁盘文件那样来操作StringIO。因为文件对象和StringIO大部分的方法都是一样的,比如read, readline, readlines, write, writelines都是有的,这样,StringIO就可以非常方便的作为"内存文件对象"。一个简单的例子,让你对StringIO有一个感性的认识:from io import StringIO s =io.Str转载 2020-08-16 12:44:13 · 151 阅读 · 0 评论 -
python--基础知识点--typing模块
实例引入我们知道 Python 是一种动态语言,在声明一个变量时我们不需要显式地声明它的类型,例如下面的例子:a = 2print('1 + a =', 1 + a)运行结果:1 + a = 3这里我们首先声明了一个变量 a,并将其赋值为了 2,然后将最后的结果打印出来,程序输出来了正确的结果。但在这个过程中,我们没有声明它到底是什么类型。但如果这时候我们将 a 变成一个字符串类型,结果会是怎样的呢?改写如下:a = '2'print('1 + a =', 1 + a)运行结果:转载 2020-08-16 11:43:40 · 1112 阅读 · 0 评论 -
python--基础知识点--inspect模块
1.函数定义的弊端Python是动态语言 ,变量随时可以被赋值,且能赋值为不同的类型Python不是静态编译语言,变量类型是在运行期决定的动态语言很灵活,但是这种特性也是弊端2. 函数注解Python 3.5 引入对函数的参数进行类型注解对函数的返回值进行类型注解只对函数参数做一个辅助的说明,并不对函数参数进行类型检查提供给第三方工具,做代码分析,发现隐藏的bug函数注解的信息,保存在__annotations__属性中def add(x:int , y:int) ->转载 2020-08-16 10:59:30 · 404 阅读 · 0 评论 -
python--基础知识点--继承、多态、鸭子类型
提到 “鸭子类型”,就要先讲讲面向对象编程语言中的继承和多态。1.继承首先创建一个 Animal() 父类,父类继承自 object,object 是所有类都会继承的类:class Animal(object): def run(self): print("The animal is running...")然后创建两个子类,继承自 Animal():class Dog(Animal): passclass Cat(Animal): pass转载 2020-08-16 08:59:46 · 361 阅读 · 0 评论 -
python--基础知识点--selector模块
1.它的功能与 linux 的 epoll,还是 select 模块, poll 等类似;实现高效的 I/O multiplexing , 常用于非阻塞的 socket 的编程中。1.1 内部类模块定义了一个 BaseSelector的抽象基类, 以及它的子类,包括:SelectSelector, PollSelector, EpollSelector, DevpollSelector, KqueueSelector.另外还有一个DefaultSelector类,它其实是以上其中一个子类的别名原创 2020-08-10 14:45:41 · 1565 阅读 · 0 评论 -
python--基础知识点--deque
创建双向队列import collectionsd = collections.deque()append(往右边添加一个元素)import collectionsd = collections.deque()d.append(1)d.append(2)print(d)#输出:deque([1, 2])appendleft(往左边添加一个元素)import collectionsd = collections.deque()d.append(1)d.appendleft(2转载 2020-07-27 16:07:41 · 114 阅读 · 0 评论 -
python--基础知识点--print、pprint
1. pprintpprint模块能以解释器可以解析的输入形式漂亮地打印python数据结构的形式1.1 pprint.PrettyPrinter语法class pprint.PrettyPrinter(indent=1, width=80, depth=None, stream=None, *, compact=False)参数indent:表示缩进几个字符width:表示一行最多输出多少字符depth: 表示输出的深度stream:compact:compact=True表示在转载 2020-08-10 10:52:51 · 304 阅读 · 0 评论 -
python--基础知识点--socket_udp_tcp代码示例
# udp_server.pyimport socketimport astserver = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)host = socket.gethostname()server.bind((host, 9998))accounts = {} # 在线用户表while True: data, address = server.recvfrom(1024) data =原创 2020-08-02 20:00:24 · 135 阅读 · 0 评论 -
python--基础知识点--socket
1. socket是什么从TCP/IP协议簇角度讲Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。从Unix/Linux中的文件角度讲Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。我原创 2020-08-07 11:58:26 · 458 阅读 · 0 评论 -
python--基础知识点--bio、nio、多路复用代码示例
1. bio# bio_server.pyimport socketimport threadingdef sub_conn(conn): while True: result = conn.recv(5).decode("utf-8") if result == "end" or not result: break print(result) conn.close()server = socket.原创 2020-08-06 20:03:48 · 2079 阅读 · 1 评论 -
python--基础知识点--__str__、__repr__
1. 异同点1.1 相同点都是用来描述对象信息的,返回的是字符串对象。使用__str__ 和 __repr__中的任意一个方法定义类到字符串的转化方式,不需要手动的打印某些属性和一些额外的信息。1.2 不同点设计目的不同__repr__的目标是准确性,或者说,__repr__的结果是让解释器用的。目前理解,返回的都是字符串表达式(但仅限于python内置的类,自定义的类由于程序员自定义返回的可能只是一个普通字符串并不是字符串表达式),可以直接在终端下输入然后回车或通过eval()执行成功。原创 2020-07-28 16:08:18 · 204 阅读 · 0 评论 -
python--基础知识点--python中的四种队列
队列是一种只允许在一端进行插入操作,而在另一端进行删除操作的线性表。这篇文章主要介绍了Python中的四种队列,需要的朋友可以参考下队列是一种只允许在一端进行插入操作,而在另一端进行删除操作的线性表。在Python文档中搜索队列(queue)会发现,Python标准库中包含了四种队列,分别是queue.Queue / asyncio.Queue / multiprocessing.Queue / collections.deque。collections.dequedeque是双端队列(doub.转载 2020-07-27 15:53:51 · 353 阅读 · 0 评论 -
python--基础知识点--导入模块
1. 包的概念和结构当一个项目中有很多模块时,需要再进行组织时。可将模块功能类似的模块放到一起形成“包”。本质上,“包”就是一个必须有__init__.py文件的文件夹。包下面可以包含“模块”,也可以再包含“子包”。就像文件夹下可以有文件也可以有子文件夹一样。__init__.py文件的作用:包的标识,区别于普通文件夹。实现模糊导入,就是使用import * 导包。导入包实际执行的是__init__.py文件,可以在这个__init__.py文件中做这个包的初始化,以及需要统一执行的代码。原创 2020-07-27 15:17:32 · 827 阅读 · 0 评论 -
python--基础知识点--unittest模块
1. 什么是单元测试1.1 定义单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。1.2 单元测试中最核心的四个概念test case(测试用例):一个testcase的实例就是一个测试用例。测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown)TestSuite(测试套件):多个测试用例集合在一起。TestLoader(测试用例加载器):用来加载Testcase到TestSuite中。TextTestRun原创 2020-07-24 15:26:15 · 296 阅读 · 0 评论 -
python--基础知识点--queue模块
Python Queue(队列) Queue模块实现了多生产者、多消费者队列。当必须在多个线程之间安全地交换信息时,它在线程编程中特别有用,实现了所有必需的锁定语义。一、该模块实现了三种类型的队列,它们的区别仅在于检索条目的顺序:1、FIFO 队列,其添加的第一个任务是第一个检索的任务。2、LIFO 队列,其最近添加的条目是第一个检索的(像堆栈一样运行)。3、Priority 队列,其条目将保持排序,并首先检索最低值的条目。二、该模块定义了以下类和异常:class Queue.Queue(m转载 2020-07-21 22:17:30 · 330 阅读 · 1 评论 -
python--基础知识点--multiprocessing
multiprocessing — 基于进程的并行Python multiprocessing模块,常用函数和类使用多进程时,一般使用消息机制实现进程间通信,尽可能避免使用同步原语。消息机制:Pipe、Queue。同步原语:Lock、RLock、Event、Semaphore、Condition。多进程应该尽可能避免在进程间传递大量数据,越少越好。一. Lock、RLock、Event、Semaphore、Conditionmultiprocessing的Lock、RLock、Event、Se原创 2020-07-21 19:47:36 · 1470 阅读 · 0 评论 -
python--基础知识点--bytes
字节串(bytes)和字符串(string)的对比:字符串由若干个字符组成,以字符为单位进行操作;字节串由若干个字节组成,以字节为单位进行操作。字节串和字符串除了操作的数据单元不同之外,它们支持的所有方法都基本相同。字节串和字符串都是不可变序列,不能随意增加和删除数据。bytes 只负责以字节序列的形式(二进制形式)来存储数据,至于这些数据到底表示什么内容(字符串、数字、图片、音频等),完全由程序的解析方式决定。如果采用合适的字符编码方式(字符集),字节串可以恢复成字符串;反之亦然,字符串也可转载 2020-07-20 17:07:22 · 500 阅读 · 0 评论 -
python--基础知识点--if __name__ == “__main__“:的作用
python中每个模块都有自己的属性,其中一个属性为__name__,这是一个特殊的属性。先假设有一个模块A,当将该模块作为可执行文件时,该模块的属性__name__的值为字符串”__main__“;当将该模块作为另一个模块的导入模块时,该模块的属性__name__的值为该模块的模块名”A“。作用:通过if name == “main”:语句可以避免在当该模块作为另一个模块的导入模块时,该语句后面的语句被执行。通过if name == “main”:语句可以对该模块做一个简单的单元测试。示例:原创 2020-07-19 17:01:09 · 195 阅读 · 0 评论 -
python--基础知识点--为什么windows下子进程的创建语句必须放在if __name__==‘__main__‘语句之后
python多进程中,对于子进程的运行机制是:每个子进程中,由于不同的进程之间有独立内存,不会共享,所以每个子进程是通过分别导入所在的脚本模块来实现目标函数的运行的。对于这个机制,有以下两点需要特别注意。1、由于每个子进程是通过导入所在脚本的模块实现模块中函数的调用的,所以,为了避免将创建子进程的语句也被导入(因为这样就会造成无限循环创建子进程,这显然是不允许的,因此python禁止了在子进程中再创建子进程,否则会报错),创建子进程的语句必须在if __name__==’__main__‘语句之后定义,或转载 2020-07-19 16:43:21 · 665 阅读 · 0 评论 -
python--基础知识点--多线程和多进程对比
多线程和多进程对比 cpu密集型操作,使用多进程编程;对于IO密集型操作,使用多线程编程。原因:进程切换代价(资源、时间)高于线程切换代价。cpu密集型操作,多进程快于多线程import timefrom concurrent.futures import ThreadPoolExecutor, as_completed, ProcessPoolExecutordef fib(n)...原创 2019-10-14 19:15:35 · 261 阅读 · 0 评论 -
python--基础知识点--threading模块Lock、RLock、Event、Semaphore、Condition区别
Lock:与资源占用相关。多个线程互斥占用某个临界资源时使用。RLock:与资源占用相关。与Lock类似,只不过它是个递归锁,递归时使用。Semaphore:与资源占用相关。多个线程竞争占用固定数量的有限资源时,可用于控制线程的并发数,最大并发数等于Semaphore的信号量个数(设置信号量个数=有限资源的个数),即一个并发线程占用一个有限资源。Event:与线程同步相关,与资源占用无关。一个线程发送一个event信号,其他的线程则等待这个信号。常用在一个线程需要根据另外一个线程的状态来确定自己的下一原创 2020-07-19 14:26:48 · 691 阅读 · 0 评论 -
python--基础知识点--threading.Event事件
1. 同步当线程在系统中运行时,线程的调度具有一定的透明性,通常程序无法准确控制线程的轮换执行,如果有需要,Python 可通过线程通信来保证线程协调运行。同步:多个线程协按照一定的顺序协同完成某一任务。为了实现同步,可以借助于 Event 对象来保持协调。2. EventEvent是线程间通信间的机制之一:一个线程发送一个event信号,其他的线程则等待这个信号。常用在一个线程需要根据另外一个线程的状态来确定自己的下一步操作的情况。Event原理:事件对象管理一个内部标志,通过set()方法将原创 2020-07-19 13:59:20 · 2376 阅读 · 0 评论