![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
python3 高级进阶之路
上海_彭彭
这个作者很懒,什么都没留下…
展开
-
python-获取dict的key 路径
有时候我们想获取key,这个好办直接遍历判断就行, 如果想获取key 在的路径 就显得比较麻烦,下边的演示就是获取key 路径, 核心思想是递归import copydemo_dect = { 'TASKBAR': { 'WINKEY': { 'CLOUDMUSIC': 0 }, 'POWER': { ...原创 2019-12-16 11:27:25 · 1627 阅读 · 0 评论 -
python-批量为类添加属性
有一个场景就是我们 给你一个list 批量把里面的值 赋给类里,如何做呢, 请看代码:test=["a","b","c"] // 指定需要添加的属性名req={"a":1,"b":2,"c":3,“d”:4} //指定dataDepence = type("Depence",(),{}) //创建类for i in test: setattr(Depence,i,eval(st...原创 2019-12-05 12:18:12 · 2118 阅读 · 0 评论 -
python高级进阶_9_垃圾回收之小数整数池,大整数池,intern 机制01
之前我还在考虑,这个垃圾回收有没有必要写, 但是想想在性能测试的时候,经常遇到垃圾回收的东西,内存泄漏什么的,如果你不懂垃圾回收,可能后边做性能测试就有点难了, 在开发的时候你不懂也没有关系,不影响你写代码,小数整数池为什么 称为池子呢, 池子在python 经常会遇到, 以后我们也会说进程池,线程池。池子可以理解为 里面已经有存储的东西,你直接拿来用就行了, 如果池子没有东西 ,你...原创 2019-06-11 19:30:29 · 440 阅读 · 0 评论 -
python高级进阶_20_进程之间的通信之queue(Poo演示)
from multiprocessing import Manager,Poolimport random ,time,osdef write(q): for i in range(10): q.put(i) print("正在添加=====%d====到queue "%i) time.sleep(1)def read(q): ...原创 2019-06-17 14:01:58 · 216 阅读 · 0 评论 -
python高级进阶_20_进程之间的通信之queue(Process演示)
咱们先搞清楚原创 2019-06-17 13:46:19 · 389 阅读 · 0 评论 -
python高级进阶_27_经典死锁案例讲解
死锁的概念 解读为: 一个进程或者线程 占用了资源,不能进行释放,导致另一个线程等待他一直等不到,导致程序一直等待,进入一个假死状态。引起死锁有两种方式:迭代锁相互引用锁迭代锁是由于重复上锁 导致的 死锁 ,代码如下:该情况是一个线程“迭代”请求同一个资源,直接就会造成死锁:import threadingfrom threading import Thread ,Lockd...原创 2019-06-21 14:13:32 · 322 阅读 · 0 评论 -
python高级进阶_6_类当作装饰器原理以及执行过程07
咱们知道函数是可以当作装饰器, 他应用的是 闭包函数特性, 实际类只要符合闭包的特性也可以当作装饰器。讲解装饰器之前 必须明白一个 魔法函数 call, 代码如下 :class Person(): def __init__(self,name): self.name=namep=Person("xiao hei")print(p()) # 执行实例方法 ...原创 2019-06-11 12:47:01 · 197 阅读 · 0 评论 -
python高级进阶_19_快速理解python阻塞式进程池(apply)
先理解阻塞的概念 , 阻塞: 就是当本任务完成了,才能继续运行,后边的任务需要排队。 ***阻塞的执行模式 是 产生一个任务,立马就让 进程1 执行, 再产生一个,然后让进程2执行下一个。轮流执行 直到执行完毕, 非阻塞的模式 执行, 立刻产生十个任务 ,分配给进程池执行。***把上节的代码只要改一个单词就完成了,就是 把 apply_async >>>> ...原创 2019-06-16 20:57:52 · 929 阅读 · 1 评论 -
python高级进阶_19_快速理解python进程池(pool)
在前面的博客我也写了什么是池子, 池子就是里面的东西给你准备好了,你直接用就行了,相当于缓存。进程池也是创建进程的, 和前面 Process 类,Process 子类差别很大,进程池 可以一次创建多个进程,并且可以执行多个任务Process 类,Process 子类 ,需要实例化 才能达到,并不能真正意义上的多任务请看示例代码:解释在注释里,自己理解下,不懂请评论谢谢from mu...原创 2019-06-16 18:06:17 · 447 阅读 · 2 评论 -
python高级进阶_18_继承Process类,并创建子进程
Process 创建进程,虽然很方便但是在场景复杂的时候,就显得苍白无力,有一个方法就是 继承Process 类 ,生成子类 并完善子类,比如 创建属性 和额外的方法子类要注意以下几点继承 Process 类重写 run 方法 ,运行的时候不需要使用target指定方法在子类初始化的时候也可以传入属性值from multiprocessing import Processim...原创 2019-06-16 16:02:01 · 784 阅读 · 0 评论 -
python高级进阶_8_生成器yield的用处_协程04
我们讲了这么多生成器, 它到底有何用, 除了利用它的惰性,可以取大文件内容,以避免由于内存过大崩掉。还有一个用处就是 三大阵营中的一个 协程, 三大阵营一共有三个 : 线程,进程,协程。yield 可以支持并发观察下边的代码如下:def test(): a=1 print("----------------------------test start -------...原创 2019-06-11 09:58:42 · 201 阅读 · 0 评论 -
python高级进阶_8_使用生成器send(arg)注意事项03
看下下边的代码:def test(): i=0 while i<5: temp=yield i*i print(temp) i=i+1a=test() # 生成器对象 ,里面都是存储 i*i的值a.send("heihei")但是报错了 a.send("heihei")TypeError: can...原创 2019-06-10 22:34:40 · 209 阅读 · 0 评论 -
python高级进阶_8_ 生成器 next 和send的区别02
先看下边的代码观察 next 和send 的区别def test(): i=0 while i<5: temp=yield i*i print(temp) i=i+1a=test() # 生成器对象 ,里面都是存储 i*i的值print("next start")print(next(a)) #取第一...原创 2019-06-10 21:32:39 · 1720 阅读 · 0 评论 -
python高级进阶_17_多进程 Process 类的常用操作
Process 常用的操作有一下,实例Process对象传递参数join() 等待进程结束才能执行其他的terminate()停止子进程演示参数传递:from multiprocessing import Processimport timea=1000def test(args,args2): for i in range(2): global ...原创 2019-06-16 14:01:58 · 413 阅读 · 0 评论 -
python高级进阶_9_垃圾回收之引用计数02
垃圾回收英文是 Garbage collection(GC), 当有人说GC的时候就要想到是垃圾回收。在你跟大佬聊天的时候,人家说GC消耗的时间长吗, 你说什么是GC呀,大佬就没有跟你聊下去的必要,瞬间被藐视。垃圾回收机制主要的任务有以下:分配内存对象引用计数, 并识别没有引用的对象进行清除没有引用的对象下边介绍计数规则,什么时候算+1:a=1 创建对象时候 , 创建 数字,字...原创 2019-06-11 23:36:21 · 212 阅读 · 1 评论 -
python高级进阶_21_使用threading 完成多线程多任务
前面说的多进程可以完成多任务, 为什么还需要讲多线程呢,多进程是copy 一份代码,然后再执行, 就相当于你电脑上安装了两个微信,同时运行。有个问题就是如果想实现 一个微信聊天 开多个窗口呢, 这个是多进程是无法实现的,是在一个代码块里实现多任务,那就用到了 多线程。多线程–threadingpython 的 thread模块 比较底层,而 threading 是对 thread 做了一...原创 2019-06-17 19:15:16 · 352 阅读 · 0 评论 -
Python 六中方法介绍 str和list互相转换 (学不会你来打我)
#!/usr/bin/python-- coding:utf-8 --str to liststr1 = ‘iloveyou’str2 = ‘i.love.you’str3 = ‘i love you’print 'list: str1 change to —> ', list(str1)print ‘list: str2 change to —> ‘, str2.spl...原创 2019-07-29 19:22:35 · 252 阅读 · 0 评论 -
python高级进阶_36_熟悉tftp协议代码模拟下载过程
代码如下:# -*- coding:utf-8 -*-import structfrom socket import *import timeimport osdef main(): #0. 获取要下载的文件名字: downloadFileName = input("请输入要下载的文件名:") #1.创建socket udpSocket = socket(AF_INE...原创 2019-07-03 09:13:26 · 155 阅读 · 0 评论 -
python高级进阶_35_一分钟明白TCP/IP网络通信过程
在面试的经常会问到这个问题, 网络传输的过程经历了哪些?正好看到这一节的内容,我就随便总结一下,尽量用简单的语言解释好这个问题。####先声明下, 当面试官问 TCP/IP 的时候,不要回答 TCP/IP 两个协议,当你这样回答的时候,估计面试官心凉, 可以回去喝茶了,它是个协议族,是整个网络传输的总称。先看一下图他的执行过程是这样的当应用层 发送一句话 比如:“ 这段话将要传输到...原创 2019-06-23 13:24:54 · 280 阅读 · 0 评论 -
python高级进阶_33_使用socket 模拟UDP服务器接收信息
在写服务端的时候,一定要明白一个事情就是 绑定端口和ip 。有的人该问了在写发送方的时候,为什么没有写 ip 和端口解释如下:发送方的IP 可以是动态的, 是由操作系统自动分配的, 发送方只是客户端,服务器不会关心你的客户端的ip ,只要发送我就接受 。但是 服务器端 如果不绑定 ip ,当 客户端发送信息的时候,找不到ip 路由,就是达不到你这个机器上,有个规定 当你不绑定的时候,默认...原创 2019-06-23 12:51:50 · 265 阅读 · 0 评论 -
python高级进阶_32_使用socket 模拟UDP 和TCP 发送消息
前面在学习多进程 之间通信用到 QUEQUE, 那也只是在同一台电脑,进行通信,那如何在不同的电脑传输数据呢, 就用到了网络传输,以后的章节我都写网络编程的知识。首先我们要了解 IP 和 端口 两个概念,当我们把一个消息发送到电脑 qq 里, 为什么他能找到你的电脑呢, 就是用 IP 协议 , 为什么找到你的电脑也能找你的qq呢,为什么不发到微信里, 说明用到了端口号。 端口是分辨电脑里...原创 2019-06-22 22:25:48 · 826 阅读 · 0 评论 -
python高级进阶_30_一分钟明白异步概念以及作用
经过和我们群里的讨论,最终一致认为这两个概念 应该如下理解:同步调用:它是属于阻塞类型,举个例子我去星巴克去喝咖啡, 我到地方了,我说要一杯加糖加奶的咖啡,服务员说了,你等会吧 , 我就什么都不做,就一直傻傻等,什么时候美女递过来了我才回去。异步调用:它是属于非阻塞类型,同样也是订购咖啡,服务员说了,你等会吧, 要是异步怎么处理呢, 就给服务员说了,我去看书,等你什么时候做好了,你告诉我下...原创 2019-06-22 15:39:22 · 354 阅读 · 0 评论 -
python高级进阶_29_生产者和消费者 设计模式
当我看到生产者和消费者模式后,让我激动不已, 想起来一个词语,数学之美,如果你能从中体会到魅力之处,我相信你一定会开心的笑起来。生产者 和消费者 设计模式 使用的场景?答: 只要看到 一边 生产数据,一边处理数据的时候,就可以用到这个模式使用这个有什么好处 ?第一: 一个类就做一件事情,这样 就可以使用多线程,全部都放一个类你多线程不好搞, 还有一个好处,修改代码容易看,并不是...原创 2019-06-22 12:12:14 · 330 阅读 · 0 评论 -
python高级进阶_24_代码演示多线程之间 共享全局变量
在学习多进程的时候,我们说过他们的数据是隔离的, 如果想进程之间的数据传递 ,必须用queue 等方式达到数据的传递。但是多线程有个特点,它是共享全局变量的,仔细观察下,下边的代码:import threading ,timeclass MyThread(threading.Thread): def run(self): for i in range(4): ...原创 2019-06-17 22:43:05 · 257 阅读 · 0 评论 -
python高级进阶_23_验证多线程的执行顺序
请看代码 根据代码识别,多线程的执行顺序import threading ,timeclass MyThread(threading.Thread): def run(self): for i in range(4): time.sleep(1) print("线程的任务序号为:-----%d----我是自定义类造的线...原创 2019-06-17 22:16:51 · 319 阅读 · 0 评论 -
python高级进阶_28_线程同步概念理解与使用方法
线程中 有四个概念比较重要,阻塞, 非阻塞, 同步 ,异步阻塞: 就是只有当阻塞的程序运行完了,你才能结束,它不完成你就一定要等待 直到结束后,你再结束,前面我们介绍的线程或者 进程的 join() , 他们也是等待 子线程或者 子进程完成之后 才能结束。非阻塞: 他们的线程或者进程之间没有关系, 根本没有线程或者主进程 等待之说,也有可能主线程结束了,你也没有结束,直接中断子线程的运行。...原创 2019-06-21 21:47:44 · 167 阅读 · 0 评论 -
python高级进阶_22_使用自定义的类完成多线程多任务
咱们在多进程里,如果想自定义类,就必须继承 Process类, 然后重写了 run方法,直接调用咱们的自定义类就可以完成,同理,多线程也是可以这么实现的, 怎么做的呢, 直接继承 threading.Thread ,然后重写 run 方法。示例代码如下:import threading ,timeclass MyThread(threading.Thread): def run...原创 2019-06-17 20:39:20 · 206 阅读 · 0 评论 -
python高级进阶_16_代码证明主进程等待子进程先结束 和主进程与子进程互不干扰
我们在fork 创建子进程的时候,有个特点就是 主进程和子进程互不影响, 但是 我们在用Process 类创建的子进程就需要等待子进程全部结束后然后再结束主进程。下边我们验证两个问题:主进程的和子进程之间数据隔离主进程等待子进程结束后再结束下边的代码 打印都是一样,说明他们公用一个数据a=1000def test(): global a a+=1 prin...原创 2019-06-16 11:49:38 · 2865 阅读 · 2 评论 -
python高级进阶_8_ 生成器概念的理解01
先介绍生成器之前 先要了解为什么要有生成器,生成器的使用场景是什么。列表生成式 变成生成器如下:a=[x*2 for x in range(1000000) if x%2==0 ]print (a)当列表很庞大的时候, 内存根本装不了,这个时候系统就崩掉。 这个时候要用生成器 。生成器: 是指 它只会记忆你的计算过程,当你需要的时候随便取,不会一下子就全部给你。如果把列表生成式...原创 2019-06-10 18:53:58 · 226 阅读 · 0 评论 -
python高级进阶_26_多线程锁会遇到的问题总结
先看上一节的代码, 我们再改良下,看看是什么效果?下边的代码,细心的小伙伴可以看出, 本来是多线程 却让你逼成单线程,因为 在加锁和释放锁 都是在循环计算的外边,也就是 在线程一 执行完后 再执行 线程二,import threading ,timedef work1(): global num mutex.acquire() # 上锁 for i in ran...原创 2019-06-20 14:16:50 · 385 阅读 · 1 评论 -
python高级进阶_6_通俗易懂理解装饰器的原理01
理解装饰器之前,先看下这个代码 :def test(): print("testing")def test(): print(" love ")test()大家猜猜 打印的什么 ?答案是 love为了 好理解, 我们先看以下 这个就好理解了a=2 # 首先开辟一段内存, 让 a 指向2 a=3 # 又开辟一段内存, 然后让a 指向 3, 2 这...原创 2019-06-08 23:18:41 · 210 阅读 · 0 评论 -
python高级进阶_5_闭包的使用场景02
我先举个例子 代码如下:def test(a,b,c): print( a*b+c)test(1,1,2)test(1,1,3)test(1,1,4)test(1,1,5)test(1,1,6)test(2,2,1)test(2,2,2)test(2,2,3)test(2,2,4)我们会发现一个共同的问题, a,b 是固定的,只是c 会变动,如何减少a,b 参...原创 2019-06-08 18:35:30 · 1456 阅读 · 0 评论 -
python高级进阶_5_闭包没有这么难01
了解闭包之前,我们要了解一个概念 就是: 方法名 指向方法体 。用代码解释下就好理解了def add(): print("testing")add()print(add) 打印结果:testing<function add at 0x0000019C9BB901E0> # 打印结果可以看出是打印的 函数对象, add 名字 >>> add...原创 2019-06-08 17:36:08 · 166 阅读 · 0 评论 -
python高级进阶_4_ 理解迭代器和迭代对象的区别01
1. 迭代对象 是指 可以用for 循环进行遍历 ,他们都具有可迭代的能力,例如 list ,dict tuple ,生成器 ,string如下:for i in “abc”: print(i) 2. 如果判断是否是一个可迭代对象 ,代码如下:from collections import Iterableprint (isinstance([],Iterabl...原创 2019-06-08 15:53:47 · 202 阅读 · 0 评论 -
python高级进阶_3_ property() 的应用 效果和@property 装饰器一样的效果02
class Student: def __init__(self,name): self.name=name self._age=18 def getage(self): return self._age def setage(self,age): if isinstance(age,int): ...原创 2019-06-08 11:14:25 · 146 阅读 · 0 评论 -
python高级进阶_3_ @property 装饰器的意义01
这个章节大部分人都明白@property 的作用。难道不是把方法转化成属性,可以直接赋值?那我们说说为什么这么做有什么意义呢?先用代码一点点引导。1.避免直接赋值,绕过校验class Student: def __init__(self,name,age): self.name=name self.age=agestu=Student("La...原创 2018-11-04 18:23:02 · 412 阅读 · 0 评论 -
python高级进阶_2_ 不可变类型copy特点03
不可变类型的copy,首先会判断是否可变, 如果可变就直接 变成浅拷贝, 直接把把指针给他。示例代码如下:import copya=[1,2]b=[3,4]c=(a,b)d=cf=copy.copy(c)a.append(6)print(c)print(d)print(f)print(id(c),id(f))...原创 2019-06-08 10:07:31 · 122 阅读 · 0 评论 -
python高级进阶_2_ copy和deepcopy的区别02
copy 和deepcopy 都能达到深copy, 他们的区别 deepcopy 能彻底, 属于递归copy自己看下代码 琢磨下 ,不能理解在底下留言,我会画图解释import copya=[1,2]b=[3,4]c=[a,b]d=ce=copy.deepcopy(c)f=copy.copy(c)a.append(6)print(c)print(d)print(e...原创 2019-06-08 10:08:06 · 164 阅读 · 0 评论 -
python高级进阶_2_ 浅拷贝 和深拷贝的区别01
大家学过 Linux 都知道 软链接 , 硬链接 对应的是 浅拷贝和深拷贝 ,不完全相同 但是思想是一样的。浅拷贝的意思: 不会开辟内存,只是 增加指针而已, 当没有指针指向内存就垃圾回收深拷贝的意思: 开辟两个两块内存,指针指向各自的内存验证 浅拷贝:a=[1,2]b=aprint(id(a))print(id(b))打印结果:176265584141617626...原创 2019-06-07 19:07:27 · 211 阅读 · 0 评论 -
python高级进阶_1_is,== 之间的区别
总结:is 是指 id 是否一样, == 只是针对valuea=[1,2]b=[1,2]c=aprint(id(a))print(id(b))print(id(c))print(a==b)print(a==c) print(b==c)print(a is b)print(a is c)print(b is c)打印结果:21069455474002...原创 2019-06-07 18:08:04 · 218 阅读 · 0 评论