Python 高级编程技巧
Python 高级编程技巧
白菜执笔人
这个作者很懒,什么都没留下…
展开
-
深入类和对象
高级编程技巧 学习笔记一、鸭子类型和多态 多态的概念是应用于 Java 和 C# 这一类强类型语言中,而 Python 崇尚 " 鸭子类型 "。 动态语言调用实例方法时不检查类型,只要方法存在, 参数正确, 就可以调用. 这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个...原创 2020-01-17 08:29:34 · 95 阅读 · 0 评论 -
如何派生内置不可变类型并修改其实例化行为
高级编程技巧 学习笔记一、如何派生内置不可变类型并修改其实例化行为1.1、问题 我们想自定义一种新类型的元组,对于传入的可迭代对象,我们只保留其中int类型且值大于0的元素,例如:IntTuple([2,-2,'jr',['x','y'],4]) => (2,4) 如何继承...原创 2020-01-18 23:38:03 · 148 阅读 · 0 评论 -
防止动态绑定,节省大量空间
高级编程技巧 学习笔记一、如何为创建大量实例节省内存1.1、问题 在游戏中,定义了玩家类 player,每有一个在线玩家,在服务器内则有一个 player 的实例,当在线人数很多时,将产生大量实例(百万级) 如何降低这些大量实例的内存开销?(动态绑定属性问题)1.2、解决方案...原创 2020-01-18 23:41:24 · 291 阅读 · 0 评论 -
contextlib 搭配 yield 简化上下文管理器
高级编程技巧 学习笔记一、Python 中的 with 语句1.1、什么是上下文python 中的上下文,指的就是代码所执行的环境状态,或者运行的场景。python 上下文管理器规定了某个对象的使用范围,当进入或者离开了使用范围,会有相应的操作,多用于资源的分配和释放上,即在开始时分配资源,结束时释放资源。如文件的读写,在读写前,需要先打开文件,在读写完成后,需要关闭文件...原创 2020-01-25 21:22:49 · 206 阅读 · 0 评论 -
如何创建可管理的对象属性
高级编程技巧 学习笔记一、创建可管理的对象属性 在面向对象编程中,我们把方法看做对象的接口。直接访问对象的属性可能是不安全的,或设计上不够灵活,但是使用调用方法在形式上不如访问属性简洁。1.1、之间访问类属性存在问题,当传入的值不是 int 类型时,变量也会发生改变class A: def __init__(self...原创 2020-01-25 21:23:20 · 102 阅读 · 0 评论 -
如何让类支持比较操作
高级编程技巧 学习笔记一、让类支持比较操作 有时我们希望自定义类的实例间可以使用,<、<=、>、>=、==、!= 符号进行比较,我们自定义比较的类,例如,有一个矩形的类,比较两个矩形的实例时,比较的是他们的面积。int 类型比较的是 大小str 类型比较的是 ask 码(一个一个比较)集合类型比...原创 2020-01-25 21:23:34 · 141 阅读 · 0 评论 -
通过实例方法名字的字符串调用方法
高级编程技巧 学习笔记一、使用方法的名字调用方法1.1、getattr 方法getattr() 函数用于返回一个对象属性值。语法: getattr(object, name[, default])object:对象name:字符串,对象属性default: 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError返回值:返回对象属性...原创 2020-01-25 21:23:58 · 392 阅读 · 0 评论 -
Python 垃圾回事机制
高级编程技巧 学习笔记一、让类支持比较操作原创 2020-01-25 22:53:04 · 90 阅读 · 0 评论 -
代码调试和性能分析
高级编程技巧 学习笔记一、调试和性能分析1.1、使用 pdb 进行代码调试 首先,我们来看代码的调试。也许不少人会有疑问:代码调试?说白了不就是在程序中使用 print() 语句吗? 没错,在程序中相应的地方打印,的确是调试程序的一个常用手段,但这只适用于小型程序。因为你每次都得...原创 2020-01-26 14:05:05 · 1297 阅读 · 0 评论 -
经典的参数错误
高级编程技巧 学习笔记一、经典的参数错误1.1、测试def add(a, b): a += b # a = a + b # 实际上 i += 1 并不是真的在原有的int对象上+1 return aa = 1b = 2c = add(a, b)print(c) # 3print(a, b) # 1 2...原创 2020-01-26 14:23:33 · 446 阅读 · 0 评论 -
Python socket 编程
高级编程技巧 学习笔记一、一些概念1.1、IP地址目的:用来标记网络上的一台电脑windows 和 Linux 查看网卡信息Linux 中 ifconfigwindows 中 ipconfig1.2、IP地址的分类...原创 2020-01-26 21:28:04 · 96 阅读 · 0 评论 -
UDP 通信
高级编程技巧 学习笔记一、UDP 发送数据创建套接字使用套接字收/发数据关闭套接字import socketdef main(): # 创建一个udp套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 发送数据 send_data = '666'...原创 2020-01-26 21:28:33 · 258 阅读 · 0 评论 -
TCP 通信
高级编程技巧 学习笔记一、TCP1.1、TCP 介绍TCP协议,传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP通信需要经过创建连接、数据传送、终止连接三个步骤。TCP通信模型中,在通信开始之前,一定要先建立相关连接,才能发生数据。1.2、TCP 特点面向连接通信双方必须先建立连接才能进行数据的传输可靠传输(1)TCP采用...原创 2020-01-27 21:03:43 · 236 阅读 · 0 评论 -
TCP 文件下载
高级编程技巧 学习笔记一、TCP 文件下载客户端1.1、程序流程创建套接字连接服务器要下载的文件名称发送文件下载的请求接收服务端发送过来的数据保存文件关闭套接字1.2、代码实现import socketdef main(): # 创建TCP套接字 tcp_client_socket = socket.socket(socket.A...原创 2020-01-28 12:32:27 · 399 阅读 · 0 评论 -
Python 多任务 —— 线程
高级编程技巧 学习笔记一、多任务 有很多的场景中的事情是同时进行的,比如开车的时候 手和脚共同来驾驶汽车,又比如唱歌跳舞也是同时进行的,再比如边敲代码边听歌。1.1、多任务的理解并行: 真的多任务 cpu 大于当前执行的任务并发: 假的多任务 cpu 小于当前执行的任务1.2、程序中模拟多任务import timei...原创 2020-01-28 16:14:35 · 183 阅读 · 0 评论 -
Python 多任务 —— 线程(锁)
高级编程技巧 学习笔记一、共享全局变量资源竞争一个线程写入,一个线程读取,没问题,如果两个线程都写入呢?import threadingdef demo1(nums): global num for i in range(nums): num += 1 print('demo1---num:%d' % num)def demo2(n...原创 2020-01-28 22:13:05 · 153 阅读 · 0 评论 -
Python 多任务 —— 线程同步
高级编程技巧 学习笔记一、线程同步1.1、实现两个线程一问一答两个线程 “天猫精灵”,“小艾同学”class XiaoAi(threading.Thread): def __init__(self): super().__init__(name='小艾同学') def run(self): print(f"{self.name}:...原创 2020-01-29 12:10:17 · 131 阅读 · 0 评论 -
多任务版 UDP 聊天
高级编程技巧 学习笔记一、多任务版 UDP 聊天创建套接字绑定本地信息获取对方IP和端口发送、接收数据创建两个线程,去执行功能import socketimport threadingdef recv_msg(udp_socket): # 接收数据 while True: recv_data = udp_socke...原创 2020-01-29 21:07:37 · 140 阅读 · 0 评论 -
Python 多任务 —— 进程
高级编程技巧 学习笔记一、进程1.1、进程与程序进程: 正在执行的代码 + 用到的资源程序: 没有执行的代码,是一个静态的 exe 文件1.2、进程的状态1.3、使用进程实现多任务 multiprocessing 模块 就是跨平台的多进程模块,提供了一个 Process 类 来代表一个进程对象,这个对象可以理...原创 2020-01-31 11:39:58 · 211 阅读 · 0 评论 -
Python 多任务 —— 进程池
高级编程技巧 学习笔记一、进程池1.1、为什么要用进程池 当需要创建的子进程数量不多时,可以直接利用 multiprocessing 中的 Process 动态生成多个进程,但是如果是上百甚至上千个目标,手动的去创建的进程的工作量巨大,此时就可以用到 multiprocessing 模块提供的 Pool 方法。 &nb...原创 2020-01-31 19:58:35 · 271 阅读 · 0 评论 -
多任务文件夹复制
高级编程技巧 学习笔记一、多任务文件夹复制1.1、简单实现获取用户要复制的文件夹名字创建一个新的文件夹获取文件夹的所有待拷贝的文件名字创建进程池添加拷贝任务import multiprocessingimport osdef copy_file(q, file_name, old_folder_name, new_folder_name):...原创 2020-01-31 21:16:21 · 125 阅读 · 0 评论 -
yield 的使用
高级编程技巧 学习笔记一、生成器def create_num(num): a, b = 0, 1 current_num = 0 while current_num < num: yield a a, b = b, a+b current_num += 1g = create_num(5)print(ty...原创 2020-02-01 19:26:17 · 219 阅读 · 0 评论 -
Python 多任务 —— 协程
高级编程技巧 学习笔记一、协程1.1、同步 & 异步同步: 是指代码调用 IO操作(输入输出) 时,必须等待 IO操作 完成才返回的调用方式。(多个任务串行)异步: 是指代码调用 IO操作 时,不必等 IO操作 完成就返回的调用方式。(多个任务并行)1.2、阻塞 & 非阻塞阻塞: 从调用者的角度出发,如果在调用的时候,被卡住,不能再继续向下运行,需要等待,就...原创 2020-02-01 21:00:12 · 167 阅读 · 0 评论