
python
文章平均质量分 72
mofei12138
这个作者很懒,什么都没留下…
展开
-
Python设计模式 - 适配器模式
适配器模式(Adapter Pattern)是一种结构型设计模式,它用于将一个类的接口转换为客户端所期待的另一个接口。注:在适配器模式定义中所提及的接口是指广义的接口,它可以表示一个方法或者一组方法的集合。原创 2025-03-22 18:24:22 · 1056 阅读 · 0 评论 -
Python设计模式 - 建造者模式
建造者模式是一种创建型设计模式,主要用于构建包含多个组成部分的复杂对象。它将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的对象表示。原创 2025-03-10 20:25:29 · 973 阅读 · 0 评论 -
Python设计模式 - 原型模式
原型模式是一种创建型设计模式,它可以通过复制现有对象来创建新对象,而不是直接实例化新的对象。原创 2025-02-07 20:43:46 · 1140 阅读 · 0 评论 -
Python设计模式 - 组合模式
组合模式(Composite Pattern) 是一种结构型设计模式,主要意图是将对象组织成树形结构以表示"部分-整体"的层次结构。这种模式能够使客户端统一对待单个对象和组合对象,从而简化了客户端代码。组合模式有透明组合模式和安全组合模式两种,下面分别介绍这两种模式。原创 2025-01-28 15:05:02 · 1373 阅读 · 0 评论 -
Python设计模式 - 抽象工厂模式
抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。原创 2024-08-03 18:41:07 · 1233 阅读 · 0 评论 -
Python设计模式 - 工厂方法模式
工厂方法模式是一种创建型设计模式,它定义一个创建对象的接口,让其子类来处理对象的创建,而不是直接实例化对象。原创 2024-07-28 11:55:02 · 784 阅读 · 0 评论 -
Python设计模式 - 简单工厂模式
简单工厂模式是一种创建型设计模式,它通过一个工厂类来创建对象,而不是通过客户端直接实例化对象。原创 2024-06-15 17:29:20 · 583 阅读 · 0 评论 -
在docker容器中使用gdb调试python3.11的进程
docker容器默认情况不允许使用系统ptrace,会导致gdb使用报错,运行容器时增加--cap-add sys_ptrace参数来关闭ptrace限制原创 2024-06-09 23:08:19 · 814 阅读 · 1 评论 -
Python设计模式 - 单例模式
单例模式是一种创建型设计模式, 其主要目的是确保一个类只有一个实例, 并提供一个全局访问点来访问该实例。原创 2024-05-04 16:10:41 · 1135 阅读 · 0 评论 -
使用GDB调试Docker容器中的Python进程
当一个Python程序运行停住或陷入死循环,遇到这种情况可以使用GDB命令attach到进程上,查看Python堆栈信息然后进行分析。但是当在Docker容器中运行Python程序时,因为Docker的seccomp禁用了系统ptrace,所以不能直接使用GDB调试,这时我们要借助nsenter工具进入容器命令空间再运行GDB调试。原创 2022-11-11 23:56:41 · 1119 阅读 · 0 评论 -
Flask源码解析(二):Flask的工作原理
本文通过解析Flask0.1的源码,讲解一下Flask框架的主要工作原理,包括启动应用,请求处理,路由,异常处理。原创 2022-04-23 16:19:48 · 1517 阅读 · 0 评论 -
Flask源码解析(一):WSGI
要理解 Flask 的源码,必须有一定的 Python 基础,要熟悉 decorator、magic method、iterator、generator 的概念和用法。还有一点是必须理解 WSGI,下面就讲解一些和 WSGI 相关的概念以及用一些代码来帮助理解 WSGI。原创 2022-03-26 18:47:44 · 1296 阅读 · 0 评论 -
在PyCharm中调试celery、gunicorn
如何在PyCharm中调试celery程序和以gevent模式运行的gunicorn程序。原创 2022-01-17 22:33:56 · 3419 阅读 · 1 评论 -
Python中的getattr、__getattr__、__getattribute__、__get__
getattrgetattr(object, name[, default])是Python的内置函数之一,它的作用是获取对象的属性。示例>>> class Foo:... def __init__(self, x):... self.x = x...>>> f = Foo(10)>>> getattr(f, 'x')10>>> f.x10>>> getattr(f, '原创 2021-12-26 22:05:41 · 737 阅读 · 0 评论 -
在Flask中的一种无需生成zip文件的下载方式
背景在Flask中对文件进行归档并下载时,一般会使用zipfile库。由于zipfile库必须先生成zip文件再进行下载,所以当生成的zip文件较多且较大时,会逐渐消耗磁盘的容量。为了避免这种情况,我们可以使用zipstream库。使用zipstream库zipstream可以不生成zip文件,直接下载:@app.route('/package.zip', methods=['GET'], endpoint='zipball')def zipball(): z = zipstream.Zi原创 2021-05-17 18:24:39 · 1151 阅读 · 0 评论 -
Sqlalchemy中取消已存在的排序规则
分析order_by()函数的源码如下:@inspection._self_inspects@log.class_loggerclass Query(object): @_generative(_no_statement_condition, _no_limit_offset) def order_by(self, *criterion): """apply one or more ORDER BY criterion to the query and return原创 2021-04-11 14:40:59 · 168 阅读 · 0 评论 -
python自定义类对象为什么unhashable?
当我自定义类时,如果定义了__eq__方法,这个类的对象会变成unhashable。以下是在python3.6中的情况:>>> class Item:... def __init__(self, name):... self.name = name... def __eq__(self, other):... if not isinstance(other, self.__class__):... retu原创 2020-09-25 23:36:31 · 1489 阅读 · 0 评论 -
在flask-restplus下统一接口返回格式
在flask-restplus下统一接口返回格式背景在使用flask+flask-restplus时,业务正常时接口函数返回一个可以json序列化的对象@ns.route('/hello')class Hello(Resource): def get(self): return ['hello', 'hi']接口返回内容如下:[ "hello", "hi"]当业务异常(比如检测到参数错误)时,一般调用abort函数,它会抛出一个HTTPExcept原创 2020-07-04 17:12:03 · 3001 阅读 · 0 评论 -
python读取未知编码文件
python读取未知编码文件背景测试文件说明使用chardet模块来检测编码小文件的编码检测大文件的编码检测结合检测编码和读取内容背景在开发错误日志功能时,需要读取不同编码的文件然后对文件内容进行解析,那么首先要解决的就是如何检测编码的问题。测试文件说明为了方便演示,先创建5个测试文件(文件名对应编码):utf8-file,utf8bom-file,gbk-file,utf16le-file,utf16be-file。5个文件统一写入以下内容:abcd1234一二三四使用chardet模块原创 2020-06-27 17:26:39 · 4354 阅读 · 3 评论 -
python:MRO的计算方式
我们都已经知道,Python 3(Python 2 的新式类)中多继承模式是使用 C3 算法来确定 MRO(Method Resolution Order) 的。下面就讲解C3算法具体是怎么计算的。MRO计算规则首先来定义一些符号:用CN表示一个类:C1, C2, C3, ..., CNC1 C2 C3 ... CN 表示的是一个包含多个类的列表其中:head = ...原创 2020-03-15 13:37:09 · 469 阅读 · 0 评论 -
python对象池
python对象池python中,一切皆为对象id方法的返回值就是对象的内存地址。is运算符,如果引用的是同一个对象则返回true,x is y类似 id(x) == id(y) 小整数对象池[-5, 256] 这些小整数被定义在了一个整数对象池里,当引用小整数时会自动引用整数对象池里的对象,所以这些小整数不会重复创建,当多个变量指向同一个小整数时,实质上它们指向的是同一个对象...原创 2018-07-17 16:57:52 · 2432 阅读 · 0 评论 -
python文件操作总结
文件操作模式r只读,r+读写,不创建,若文件不存在,报错w新建只写,w+新建读写,二者都会将文件内容清零a新建附加写,a+新建附加读写 File对象方法file.close()关闭文件。关闭后文件不能再进行读写操作。file.flush()刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入file.fileno()...原创 2018-07-26 17:40:17 · 238 阅读 · 0 评论 -
迭代器,生成器,解析式
在python中容器,可迭代对象,迭代器,生成器,解析式这几个概念容易混淆,它们的关系如下图所示 容器(container)容器是用来储存多个数据的一种数据结构,python中的容器有list,deque,... set,frozeset,... dict,defalutdict,orderdict,counter,... tuple,namedtuple,... st...原创 2018-07-30 15:51:39 · 188 阅读 · 0 评论 -
python深浅拷贝
python深浅拷贝 对象的内存使用方式python一切皆为对象,python中的变量就相当于一个引用,指向一个对象。 a = 1整数1为一个对象。而a是一个引用,利用赋值语句,引用a指向对象1 id函数返回对象的内存地址a = 1b = 1print(id(a))print(id(b))上面程序返回152052840015205284...原创 2018-07-22 17:02:51 · 166 阅读 · 0 评论 -
pygame飞机大战游戏
使用python的pygame模块写了一个窗口的飞机大战游戏,效果如图。使用上下左右控制,获得蓝色星星火力+20,黄色星星生命+1实现代码:https://github.com/mofei952/shoot_game,欢迎star和fork ...原创 2018-07-28 12:33:08 · 787 阅读 · 0 评论 -
函数,作用域,递归
函数的5种参数类型POSITIONAL_OR_KEYWORD(位置参数或关键字参数)VAR_POSITIONAL(可变参数)KEYWORD_ONLY(关键字参数)VAR_KEYWORD(可变关键字参数)POSITIONAL_ONLY(位置参数)POSITIONAL_OR_KEYWORD如其名所见,既可以用位置传参,也可以用关键字传参def foo(name): ...原创 2018-08-01 17:46:39 · 270 阅读 · 0 评论 -
python内置函数
参考http://www.runoob.com/python3/python3-built-in-functions.htmlhttps://docs.python.org/3.5/library/functions.html """常用函数"""# len()方法返回对象(字符串、列表、元组等)长度或项目个数print(len([1, 2, 3])) # 3# divm...原创 2018-08-02 11:57:20 · 341 阅读 · 0 评论 -
Python:闭包和装饰器
闭包闭包函数必须有内嵌函数 内嵌函数需要引用该嵌套函数的上一级变量 闭包函数必须返回内嵌函数案例def line_conf(a, b): def line(x): return a * x + b return line# 只需要变换参数a,b,就可以获得不同的直线表达函数line1 = line_conf(1, 1)line2 = line_...原创 2018-08-02 12:44:19 · 187 阅读 · 0 评论 -
python内置装饰器
python内置装饰器有属性(property),类方法(classmethod),静态方法(staticmethod) 属性(property)property可以将python定义的函数当做属性访问,从而提供更加友好访问方式,但是有时候setter/deleter也是需要的只有@property表示只读。 同时有@property和@x.setter表示可读可写。 同时有@...原创 2018-08-02 14:06:42 · 1324 阅读 · 0 评论 -
python垃圾回收
引用计数PyObjectpython里每一个东西都是对象,它们的核心就是一个结构体:PyObjectPyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数。当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它的变量被删除,它的ob_refcnt就会减少引用计数优缺点优点 1.简单2.实时,一旦没有引用,内存就直接释放了。不用像其他机制等...原创 2018-10-21 13:42:27 · 840 阅读 · 1 评论 -
用python的difflib模块比较文本序列
需求背景我们需要定时采集一些配置文件的内容,每次采集之后和上一次采集的内容进行比较,将按行为单位的变更记录持久化到数据库中。这样做的好处是可以随时来查看这些变更记录,我们可以知道在什么时候进行了哪些变更,可以比较方便的分析出哪些变更影响到了服务的正常运行。下面就开始使用difflib模块来实现这个需求。difflib介绍官方文档地址:https://docs.python.or...原创 2019-09-20 23:45:33 · 600 阅读 · 0 评论 -
python:关于super
python2和python3中使用super的区别super只能用在新式类中。在python3中的所有类都是新式类,而在python2继承object的才是新式类。# python3 class A: pass # python2class A(object): passpython3可以直接使用super().xxx代替super(Class, s...原创 2019-10-09 21:13:34 · 230 阅读 · 0 评论 -
python数据类型
python六大标准数据类型Number(数字) String(字符串) List(列表) Tuple(元组) Set(集合) Dictionary(字典)注意点:Number(数字)、String(字符串)、Tuple(元组)属于不可变数据类型 List(列表)、Dictionary(字典)、Set(集合)属于可变数据类型 内置的 type() 函数可以用来查询变量所指的...原创 2018-07-16 18:06:18 · 319 阅读 · 0 评论