随笔分类 -  Python

摘要:sorted很简单,没太多好写的 ,只是给自己做个笔记。 sorted接受三个参数,返回一个排序之后的list。 第一个接受一个可迭代的对象(因为sorted实现了迭代协议,所以接受的参数不一定需要list,可以迭代的对象就可以,也是duck typing),返回一个排序之后的列表。 第二个接受一个 阅读全文
posted @ 2017-05-28 18:53 BlackMatrix 阅读(10938) 评论(0) 推荐(0)
摘要:简单一句话,当一个类实现__call__方法时,这个类的实例就会变成可调用对象。 直接上测试代码 注意,是这个类的实例变成可调用对象,类的实例变成可调用对象,类的实例变成可调用对象,而不是改变这个类的实例化行为。 那么,如果要改变一个类的被实例化行为呢? 当然要用上黑魔法元类了,因为类本身就是元类的 阅读全文
posted @ 2017-05-25 21:21 BlackMatrix 阅读(3070) 评论(2) 推荐(0)
摘要:defaultdict是dict的一个子类,接受一个工厂函数作为参数,当访问defaultdict中不存在的key时,会将工厂函数的返回值作为默认的value。 测试代码 完整代码: https://github.com/blackmatrix7/python-learning/blob/maste 阅读全文
posted @ 2017-05-25 20:32 BlackMatrix 阅读(309) 评论(0) 推荐(0)
摘要:首先,需要知道两点: 对于__getattribute__,大部分例子都是类似这样的,通过重写类的__getattribute__方法,来改变这个类的实例的属性读取行为。 但是换个角度想想,类本身也是type类的实例,如果重写type类的子类,也就是元类的__getattribute__的方法,不就 阅读全文
posted @ 2017-05-23 21:07 BlackMatrix 阅读(512) 评论(0) 推荐(0)
摘要:在Python 3.4 中,新增一个方法unwrap,用于将被装饰的函数,逐层进行解包装。 inspect.unwrap(func, *, stop=None) unwrap方法接受两个参数:func为需要解包装的函数;stop接受一个单参数的函数,作为回调函数,每次会将即将解包装的函数对象传入到回 阅读全文
posted @ 2017-05-18 21:11 BlackMatrix 阅读(2286) 评论(0) 推荐(0)
摘要:看《Python cookbook》的时候,第9.5部分,“定义一个属性可由用户修改的装饰器”,有个装饰器理解起来花了一些时间,做个笔记免得二刷这本书的时候忘了 完整代码:https://github.com/blackmatrix7/python-learning/blob/master/pyth 阅读全文
posted @ 2017-05-13 22:59 BlackMatrix 阅读(683) 评论(0) 推荐(0)
摘要:先上结论: 下面,使用一些例子,对上述结论进行检测、验证。 测试的例子中,我们创建一个装饰器、一个函数及一个类,这个类包含:实例方法、类方法、静态方法及被装饰器装饰的方法。 完整代码: https://github.com/blackmatrix7/python-learning/blob/mast 阅读全文
posted @ 2017-05-12 21:29 BlackMatrix 阅读(41776) 评论(1) 推荐(3)
摘要:查找资料,基本上判断python对象是否为可调用的函数,有三种方法 使用内置的callable函数 用于检查对象是否可调用,返回True也可能调用失败,但是返回False一定不可调用。 官方文档:https://docs.python.org/3/library/functions.html?hig 阅读全文
posted @ 2017-05-09 16:09 BlackMatrix 阅读(9219) 评论(0) 推荐(1)
摘要:最近做web api,需要在接口返回异常时,返回对应的http code。 查了下tornado的文档,是通过set_status方法来设置返回的http code,做个记录。 阅读全文
posted @ 2017-05-08 15:49 BlackMatrix 阅读(1622) 评论(0) 推荐(0)
摘要:需要先安装freetds 先用 brew list 查看已经安装的包 如果已经安装freetds,则使用 brew uninstall freetds先卸载 brew unlink freetds brew uninstall freetds 再安装 0.91版本 brew install free 阅读全文
posted @ 2017-04-21 14:10 BlackMatrix 阅读(4361) 评论(0) 推荐(1)
摘要:之前项目需求,需要通过反射获取函数的参数,python中可以通过函数签名(signature)来实现。 首先需要了解函数参数的类型,Python的参数类型一共有5种:POSITIONAL_OR_KEYWORD、VAR_POSITIONAL、VAR_KEYWORD、KEYWORD_ONLY、POSIT 阅读全文
posted @ 2017-04-06 15:05 BlackMatrix 阅读(40446) 评论(0) 推荐(2)
摘要:前言 随着项目业务需求的不断变更,数据库的表结构修改难以避免,此时就需要对数据库的修改加以记录和控制,便于项目的版本管理和随意的升级和降级。 Alembic就可以很好的解决这个问题。Alembic是SQLAlchemy作者开发的Python数据库版本管理工具。 安装 通过pip命令安装,如果使用虚拟 阅读全文
posted @ 2016-12-30 13:36 BlackMatrix 阅读(9064) 评论(1) 推荐(2)
摘要:Python 3.4 之后支持原生的虚拟环境配置(3.3的虚拟环境不支持pip),把配置过程记录一下备忘。 1.创建虚拟环境 在控制台中,使用cd目录,切换到需要创建虚拟环境的目录。 使用如下命令,在当前目录创建虚拟环境。 如 创建成功后,在目录下,有如下文件: Windows: 2.激活虚拟环境 阅读全文
posted @ 2016-10-08 14:54 BlackMatrix 阅读(5684) 评论(0) 推荐(0)
摘要:特性(property) 特性是对类的一个特定属性进行拦截,在操作这个属性时,执行特定的函数,对属性的操作进行拦截。 特性的实现 特性使用property类来实现,也可以使用property装饰器实现,二者本质是一样的。 property类的__init__函数接收4个参数,来实现属性的获取、赋值、 阅读全文
posted @ 2016-08-31 15:07 BlackMatrix 阅读(4638) 评论(0) 推荐(1)
摘要:__getattr____getattr__在当前主流的Python版本中都可用,重载__getattr__方法对类及其实例未定义的属性有效。也就属性是说,如果访问的属性存在,就不会调用__getattr__方法。这个属性的存在,包括类属性和实例属性。 Python官方文档的定义 Called wh 阅读全文
posted @ 2016-07-18 16:40 BlackMatrix 阅读(10995) 评论(3) 推荐(6)
摘要:在Python的新式类中,方法解析顺序并非是广度优先的算法,而是采用C3算法,只是在某些情况下,C3算法的结果恰巧符合广度优先算法的结果。 可以通过代码来验证下: 从第一段代码的运行结果来看,与广度优先的算法结果恰巧相同,但也只是恰巧相同,不等于就是广度优先的算法。 通过对代码进行修改可以证实: 将 阅读全文
posted @ 2016-07-05 16:59 BlackMatrix 阅读(2898) 评论(1) 推荐(0)
摘要:1.新式类与经典类 在Python 2及以前的版本中,由任意内置类型派生出的类(只要一个内置类型位于类树的某个位置),都属于“新式类”,都会获得所有“新式类”的特性;反之,即不由任意内置类型派生出的类,则称之为“经典类”。 “新式类”和“经典类”的区分在Python 3之后就已经不存在,在Pytho 阅读全文
posted @ 2016-06-30 19:50 BlackMatrix 阅读(17202) 评论(0) 推荐(5)
摘要:Python的类和类实例都是可变对象,可以随时给属性赋值,并且在原处修改。 在对类属性进行修改时需要特别小心,因为所有的类实例都继承共享类属性,除非实例本身存在和类属性同名的属性。对类属性进行修改,会影响到所有由这个类生成的实例。 运行结果: 代码中,将类属性CA.cls_pre 重新赋值为 'cc 阅读全文
posted @ 2016-06-26 19:36 BlackMatrix 阅读(9142) 评论(0) 推荐(0)
摘要:Python基础知识,自己写一写比较不容易忘 Python的每个对象都分为可变和不可变,主要的核心类型中,数字、字符串、元组是不可变的,列表、字典是可变的。 对不可变类型的变量重新赋值,实际上是重新创建一个不可变类型的对象,并将原来的变量重新指向新创建的对象(如果没有其他变量引用原有对象的话(即引用 阅读全文
posted @ 2016-06-24 14:26 BlackMatrix 阅读(39688) 评论(2) 推荐(7)
摘要:静态方法是指类中无需实例参与即可调用的方法(不需要self参数),在调用过程中,无需将类实例化,直接在类之后使用.号运算符调用方法。 通常情况下,静态方法使用@staticmethod装饰器来声明。 示例代码: 这里需要注意的是,在Python 2 中,如果一个类的方法不需要self参数,必须声明为 阅读全文
posted @ 2016-06-22 11:00 BlackMatrix 阅读(32901) 评论(2) 推荐(5)