![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Python基础
文章平均质量分 52
讹谬咯
这个作者很懒,什么都没留下…
展开
-
python --- property(lambda self: object())
property是内置的 作用:通常作为装饰器使用 a = property(lambda self: object()) ic(a) """第一次""" # ic| a: <property object at 0x7ffa7b54b810> """第二次""" # ic| a: <property object at 0x7fa7f62e8720> 每次读取a都会返回一个全新的object ...原创 2021-08-17 14:30:14 · 529 阅读 · 0 评论 -
tcp-网络
网络七层 网络四层 1.、应用层 应用层对应于OSI参考模型的高层,为用户提供所需要的各种服务,例如:FTP、Telnet、DNS、SMTP等. 2.、传输层 传输层对应于OSI参考模型的传输层,为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。该层定义了两个主要的协议:传输控制协议(TCP)和用户数据报协议(UDP). TCP协议提供的是一种可靠的、通过“三次握手”来连接的数据传输服务;而UDP协议提供的则是不保证可靠的(并不是不可靠)、无连接的数据传输服务. 3.、网际互联层 网转载 2021-03-22 21:43:19 · 130 阅读 · 0 评论 -
垃圾回收机制
引用计数 原理 当一个对象的引用被创建或者复制时,对象的引用计数加1;当一个对象的引用被销毁时,对象的引用计数减1. 当对象的引用计数减少为0时,就意味着对象已经再没有被使用了,可以将其内存释放掉。 优点 引用计数有一个很大的优点,即实时性,任何内存,一旦没有指向它的引用,就会被立即回收,而其他的垃圾收集技术必须在某种特殊条件下才能进行无效内存的回收。 缺点 引用计数机制所带来的维护引用计数的额外操作与Python运行中所进行的内存分配和释放,引用赋值的次数是成正比的, 显然比其它那些垃圾收转载 2021-03-22 20:09:19 · 58 阅读 · 0 评论 -
深浅拷贝
什么是深浅拷贝 浅拷贝: 不管多么复杂的数据结构,浅拷贝都只会copy一层 深拷贝: 深拷贝会完全复制原变量相关的所有数据,在内存中生成一套完全一样的内容,我们对这两个变量中任意一个修改都不会影响其他变量 例: import copy a = [1,2,3,4,['a','b']] b = a c = copy.copy(a) d = copy.deepcopy(a) a.append(5) a[4].append('c') print(a) # [1, 2, 3, 4, ['a', 'b',转载 2021-03-22 20:03:25 · 111 阅读 · 0 评论 -
面向对象
什么是面向对象 使用模板的思想、将世界万事万物使用对象来表示一个类型 三大特性:封装、继承、多态 封装 对类中属性和方法进行一种封装,隐藏了实现细节 继承 子类继承父类后,就具有了父类的所有属性和方法,先继承,后重写 新式类深度优先、经典类广度优先 多态 一种接口,多种表现形式 中国人、美国人都能讲话,调用中国人叫中文,调用美国人讲英文 新式类&经典类 Python3无论新式类还是经典类都是用 广度优先 Python2,新式类:广度优先,经典类:深度优先 class转载 2021-03-22 19:36:06 · 46 阅读 · 0 评论 -
生成器和迭代器
什么是生成器 生成器是一个特殊的迭代器 一个有yield关键字的函数就是一个生成器 生成器是这样一个函数,他记住上一次返回是在函数体中的位置 对生成器函数的第二次(或第n次)调用跳转至该函数的中间,而上次调用的所有局部变量都保持不变 def test(): yield 1 print('aaaa') yield 2 print('bbb') r1 = test() r1.__next__() r1.__next__() 为什么要有生成器 我们知道我们可以用列原创 2021-03-22 11:35:33 · 82 阅读 · 0 评论 -
装饰器
什么是装饰器 装饰器本质是函数,用来给其他函数添加新的功能 特点:不修改调用方式,不修改源代码 装饰器的应用场景 用户认证,判断用户是否登陆 计算函数运行时间(算是一个功能,在项目里用的不多) 插入日志 redis缓存 为什么使用装饰器 结合应用场景说需求 如何使用装饰器 装饰器求函数运行时间 import time def timer(func): #timer(test1) func=test1 def deco(*args,**kwargs): start转载 2021-03-22 11:11:44 · 50 阅读 · 0 评论 -
with上下文管理
1.上下文管理 1、什么是with语句 with是一种上下文管理协议,目的在于从流程图中把 try,except 和finally 关键字和资源分配释放相关代码统统去掉,简化try….except….finlally的处理流程。 所以使用with处理的对象必须有enter()和exit()这两个方法 1)with通过enter方法初始化(enter方法在语句体执行之前进入运行) 然后在exit中做善后以及处理异常(exit()方法在语句体执行完毕退出后运行) 2、with语句使用场景 with原创 2021-03-21 21:23:25 · 126 阅读 · 0 评论 -
线程多路复用
实现线程 1、yield实现协程效果 def consumer(name): print('开始吃包子...') while True: print('\033[31;1m[consumer]%s需要包子\033[0m'%name) bone = yield #接收send发送的数据 print('\033[31;1m[%s]吃了%s个包子\033[0m'%(name,bone)) def producer(obj1): obj1.转载 2021-03-21 21:12:54 · 285 阅读 · 0 评论 -
协程
1、 什么是协程 1)协程微线程,纤程,本质是一个单线程 2)协程能在单线程处理高并发,因为遇到IO 自动切换 线程遇到I/O操作会等待、阻塞,协程遇到I/O会自动切换(剩下的只有CPU操作) 线程的状态保存在CPU的寄存器和栈里而协程拥有自己的空间,所以无需上下文切换的开销,所以快 3)为什么协程能够遇到I/O自动切换 greenlet是C语言写的一个模块,遇到IO 手动切换 协程有一个gevent模块(封装了greenlet模块),遇到I/O 自动切换 4)协程拥有自己的空间,所以无需上下转载 2021-03-18 16:18:51 · 74 阅读 · 0 评论 -
线程
什么是线程 线程是操作系统的最小单位 线程是进程真正的执行者,是一些指令的集合(进程资源的拥有者) 同一个进程下的多个线程共享内存空间,数据直接访问(数据共享) 为了保证数据安全,必须使用线程锁 说明:下面利用for循环同时启动50个线程并行执行,执行时间是3秒而不是所有线程执行时间的总和 import threading import time def sayhi(num): #定义每个线程要运行的函数 print("running on number:%s" %num) tim原创 2021-03-18 11:24:44 · 72 阅读 · 0 评论 -
多线程模块
Python的多线程模块有两种实现方法 函数 线程类 一【函数】 调用thread模块中的start_new_thread()函数来创建线程,以线程函数的形式告诉线程该做什么 #!/usr/bin/python import thread def f(name): print "this is "+name if __name__=="__main__": thread.start_new_thread(f,("mimi",)) while 1: pass 二【线程类】 调用threadin转载 2021-03-18 10:54:08 · 113 阅读 · 0 评论 -
线程池
一、安装与简介 pip install threadpool pool = ThreadPool(poolsize) requests = makeRequests(some_callable, list_of_args, callback) [pool.putRequest(req) for req in requests] pool.wait() 第一行定义了一个线程池,表示最多可以创建poolsize这么多线程; 第二行是调用makeRequests创建了要开启多线程的函数,以及函数转载 2021-03-18 10:49:44 · 46 阅读 · 0 评论 -
进程
进程 定义: 进程是资源分配最小单位 一个运行起来的程序就是进程 进程间内存独立,不能相互访问 进程通信: 1、无名管道通信 无名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。 2、高级管道通信 高级管道(popen):将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们成为高级管道方式。 3、有名管道通信 有名管道 (named pipe) : 有名管原创 2021-03-17 15:08:51 · 49 阅读 · 0 评论 -
集合
集合作用 去重 取两个列表的交集 取两个列表的并集 list_1 = [1,2,3,4,5,1,2] #1、去重(去除list_1中重复元素1,2) list_1 = set(list_1) #去重: {1, 2, 3, 4, 5} print(list_1) list_2 = set([4,5,6,7,8]) #2、交集(在list_1和list_2中都有的元素4,5) print(list_1.intersection(list_.原创 2021-03-16 21:36:06 · 53 阅读 · 0 评论 -
字典
字典常用方法 clear方法清除字典中所有的项,这是一个原地操作,所以无返回值(或则说返回None) d = {} d['Tom']=8777 # 在字典中添加数据 d['Jack']=9999 print(d) #the result : {'Jack': 9999, 'Tom': 8777} d.clear() print(d) #the result : {} copy方法返回原创 2021-03-16 21:32:26 · 191 阅读 · 0 评论 -
字符串
字符串常用方法 find方法可以在一个较长的字符串中查找子串,他返回子串所在位置的最左端索引,如果没有找到则返回-1 a = 'abcdefghijk' print(a.find('abc')) #the result : 0 print(a.find('abc',10,100)) #the result : 11 指定查找的起始和结束查找位置 join方法是非常重要的字符串方法,他是split方法的逆方法,用来原创 2021-03-16 17:19:14 · 55 阅读 · 0 评论 -
列表 - 元祖
列表中的常见用法 append用于在列表末尾追加新的对象 a = [1, 2, 3] a.append(4) print(a) #the result : [1,2,3,4] count方法统计某个元素在列表中出现的次数 a = ['aa','bb','cc','aa','aa'] print(a.count('aa')) #the result : 3 extend方法可以在列表的末尾一次性追加另一个序列中的多个值 a = [1,2,3] b =原创 2021-03-16 16:50:44 · 119 阅读 · 0 评论