dex0423 的博客

记录工作学习的点点滴滴。

Python:动态属性 property & setter 以及 __getattr__ 属性

1. property 引言: 假设有这样一个需求,我们需要创建一个 User 类,并初始化 birthday 参数,之后根据 birthday 计算得到年龄; 我们设计下面的代码实现该需求: >>> from datetime import date, datetime >>> >>&g...

Python:使用元类实现 orm & sqlalchemy 连接池

1. orm 什么是 orm 对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术,简单的说 ORM 是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中,本质上就是将数据从一种形式转换到另外一种形式,这也同时暗示者额外的执行开销; OR...

Python:使用 configparser 模块操作 conf 配置文件

1. configparser configparser 模块在 python 中是用来读取配置文件; configparser 配置文件可以包含一个或多个节(section),每个节可以有多个参数(键=值); configparser 配置文件通常以 .conf 为后缀,作为单独文件进行保存; 2. 示例 下面为 unitConf.conf 配置文件示例: ...

Python:yield 高级用法 send、yiled from

1. yield 中 send 用法 send 作用 – 生成器函数返回值给调用方; – 调用方通过 send 传入值给生成器函数; 示例: >>> def name_func(): ... yield_result = 0 ... while 1: ... yield_result += 1 ... send...

Python:asyncio.wait 和 asyncio.gather 的异同

1. 异同点综述 相同: 从功能上看,asyncio.wait 和 asyncio.gather 实现的效果是相同的,都是把所有 Task 任务结果收集起来。 不同: asyncio.wait 会返回两个值:done 和 pending,done 为已完成的协程 Task,pending 为超时未完成的协程 Task,需通...

Python:asyncio 概念和用法详解

0. 前言 在执行一些 IO 密集型任务的时候,程序常常会因为等待 IO 而阻塞。比如在网络爬虫中,如果我们使用 requests 库来进行请求的话,如果网站响应速度过慢,程序一直在等待网站响应,最后导致其爬取效率是非常非常低的。 为了解决这类问题,本文就来探讨一下 Python 中异步协程来加速的方法,此种方法对于 IO 密集型任务非常有效。如将其应用到网络爬虫中,爬取效率甚至可...

Python:*args 和 **kargs 的用法和区别

1. *args 和 **kargs 到底有什么用 在 python 中,*args 和 **kwargs 都用作向函数传递 可变参数。 所谓 可变,其实就是参数的 数量、位置、形式 是不固定的。 之所以使用可变参数,目的是为了在构造函数的时候,增加函数功能的灵活性,同时函数写法会更加优雅。 在编程工作中,经常需要传递很多参数到函数中,但这些参数 有的时候需要用到、有时候则不需要...

Python:Python 魔法函数

1. 简介 1.1. 什么是魔法方法 Python是一门追求简单、高效的语言,它并不像某些语言如Java、C++等,需要让类实现接口并逐一实现接口中的方法。Python采用了一种约定的机制,在基类中以特殊名称的方法、属性(类似 __ init __ 这样的属性和方法)来提供指定的功能; 在Python中有些方法名、属性名前后加上了双下划线,这种方法、属性通常属于Python类的特殊...

Python:Python 迭代器原理及应用实践

使用迭代器生成斐波那契数列

1. 什么是迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式; 迭代器是一个可以记住当前遍历的位置的对象; 迭代器获基于 迭代协议 取值,背后是 __iter()__ 方法; 2. 迭代器如何工作 迭代器有两个基本的方法:__iter()__ 和 __next()__; – 注意:如果仅仅实现 __iter()__ 方法,只能通过 for 循环...

Python:Python 语言中的序列

1. Python 序列分类 1.1. 按存储数据类型分类 容器序列, – 定义:容器序列可以存放不同类型的数据,即可以存放任意类型对象的引用; – 包括:list,tuple,deque; 扁平序列 – 定义:扁平序列只能容纳一种类型,也就是说其存放的是值而不是引用,扁平序列其实是一段连续的内存空间,由此可见扁平序列其实更加紧凑。但是它里面只能存放诸如字符、字节和数值这种基础...