随笔分类 -  python随笔

摘要:前言 本文讨论python中的流程控制特性,主要包括两个方面: with语句和上下文管理器,with语句会设置一个临时的上下文,交给上下文管理器控制,并且负责清理上下文。 for while try 语句中的else子句 if语句之外的else块 for/else 只有当for循环运行完毕,即没有被 阅读全文
posted @ 2022-03-15 11:48 肖肖凯 阅读(93) 评论(0) 推荐(0)
摘要:迭代器模式 迭代器模式与yield关键字 扫描内存中放不下的数据集时,需要惰性获取数据,即按需一次获取一个数据项,这就是迭代器模式。 python为了实现迭代器模式,加入了yield关键字,用于构建生成器。 所有生成器都是迭代器,因此生成器完全实现了迭代器接口。 一般认为,迭代器用于从一个集合中取出 阅读全文
posted @ 2022-03-14 22:01 肖肖凯 阅读(260) 评论(0) 推荐(0)
摘要:不要子类化内置类型 python2.2之前,内置类型不能子类化 python2.2之后可以子类化,但是内置类型的方法无法调用其子类覆盖的方法 如下例子,内置类型dict的__init__和__update__方法会忽略子类覆盖的__setitem__方法 因此,不要直接子类化内置类型,内置类型的方法 阅读全文
posted @ 2022-03-14 19:33 肖肖凯 阅读(83) 评论(0) 推荐(0)
摘要:接口与协议定义 接口 类实现或继承的公开属性,包括特殊方法,都是类的接口。即可以为外界所知的都是接口。受保护的属性和私有属性不是接口,虽然在python中并没有真正的受保护属性和私有属性。接口有两类,一类是正式的,即抽象基类。一类是非正式的,即协议。 协议 协议也是接口,但不是正式的,协议只由文档了 阅读全文
posted @ 2022-03-14 16:29 肖肖凯 阅读(395) 评论(0) 推荐(0)
摘要:__hash__ 要让对象可散列,就要实现其__hash__方法,常用方案是将对象中各个分量的散列值异或,构成整个向量对象的散列值。 其中reduce是归约函数,其有三个参数,第一个是有两个操作数的函数,第二个是可迭代对象,第三个是可迭代对象为空时返回的默认值。 operator模块以函数的形式提供 阅读全文
posted @ 2022-03-14 15:45 肖肖凯 阅读(94) 评论(0) 推荐(0)
摘要:python中属性查找流程 对于my_obj.x表达式,首先检查my_obj实例中有没有名为x的实例属性 如果上一步没找到,检查对应的类中有没有名为x的类属性,因为类属性可以作为实例属性的默认值 如果上一步没找到,沿着继承树继续查找...... 如果仍找不到,则会调用__getattr__方法。 _ 阅读全文
posted @ 2022-03-14 11:48 肖肖凯 阅读(108) 评论(0) 推荐(0)
摘要:python协议 在python中创建功能完善的序列类型无需使用继承,只需实现符合序列协议的方法。 在面向对象编程中,协议是非正式的接口。非正式是指跟抽象基类不一样,协议只在文档中定义,不在代码中定义。 python中,只要实现了__len__和__getitem__两个特殊方法,则可认为该类是序列 阅读全文
posted @ 2022-03-14 10:40 肖肖凯 阅读(38) 评论(0) 推荐(0)
摘要:定义__slots__类属性 默认情况下,python中每个实例都用一个字典__dict__来存储所有的实例属性,但是由于字典底层是哈希表,是一种空间换时间的策略,如果程序中有非常多的实例,则内存消耗巨大。解决访问是使用__slots__类属性。 __slots__的原理是让解释器以元组的形式存储实 阅读全文
posted @ 2022-03-13 22:02 肖肖凯 阅读(71) 评论(0) 推荐(0)
摘要:python中property装饰器用于将一个方法变成一个相同名称的只读属性。 如下例子中,由于__x和__y是私有属性,不能直接访问。于是用property装饰器来修饰两个相同名称的方法,保持了python的一致性。可以直接用self.x和self.y来访问。 阅读全文
posted @ 2022-03-13 21:28 肖肖凯 阅读(56) 评论(0) 推荐(0)
摘要:python中类方法和静态方法都是用装饰器来定义。 classmethod装饰器定义类方法,classmethod修饰的方法的第一个参数一定是类本身,一般命名为cls,但实际上可以随意取名。常见用途是创建备选构造方法。 staticmethod定义静态方法,静态方法就是写在类里,由类名调用的普通函数 阅读全文
posted @ 2022-03-13 21:12 肖肖凯 阅读(58) 评论(0) 推荐(0)
摘要:对象表示形式即用字符串形式来表示一个对象,每种面向对象语言都至少有一种获取对象的字符串表示形式的方式,python中获取字符串表示形式的方法如下: repr()。以便于开发者理解的形式返回对象的字符串表示形式。底层是__repr__。 str()。以便于用户理解的形式返回字符串表示形式。底层是__s 阅读全文
posted @ 2022-03-13 21:07 肖肖凯 阅读(101) 评论(0) 推荐(0)
摘要:del命令与垃圾回收 del命令只会删除对象的引用,但是不会删除对象。但是删除引用有可能导致对象被删除。 python对象被删除有两种情况: 某个对象的引用计数为零 一组对象之间全是相互引用,导致组中对象不可取 两种情况可以归为一种,如果某个对象不可获取了,那么将会被当作垃圾回收。 尽量不要自己实现 阅读全文
posted @ 2022-03-13 20:15 肖肖凯 阅读(85) 评论(0) 推荐(0)
摘要:python变量与对象 对象是盒子,变量是标签 在python中,对象指的是一块内存区域,变量则是贴在这块区域上的标签,用来引用这片区域的值。 python中的赋值语句,因为对象总是在=右边,变量在等号左边,因此对象总是先于变量创建,正确说法是把某变量分配给某对象,而不是反过来。 对象的标识、类型和 阅读全文
posted @ 2022-03-13 19:47 肖肖凯 阅读(828) 评论(0) 推荐(0)
摘要:装饰器 装饰器定义 python装饰器本质就是一个高阶函数,其一般以一个函数为参数,返回另一个函数,返回值可以是对原函数的改造,也可以跟原函数毫无关系。如下两种代码效果完全等价: @decorate def target(): print("running target()") def target 阅读全文
posted @ 2022-03-11 21:36 肖肖凯 阅读(85) 评论(0) 推荐(0)
摘要:什么是一等对象? 满足下列条件的为一等对象: 在运行时创建 能复制给变量或数据结构中的元素 能作为参数传递给函数 能作为函数的返回结果 python中的一等对象 整数、字符串、字典等都是一等对象。 所有的函数都是一等对象,有时简称为一等函数,但是要注意并没有二等三等函数的说法。 函数对象都属于类fu 阅读全文
posted @ 2022-03-11 17:25 肖肖凯 阅读(180) 评论(0) 推荐(0)
摘要:判断是否为可调用对象 能用调用运算符()的即为可调用对象 使用内置的callable()函数判断是否是可调用对象。 python数据模型七种可调用对象 用户定义的函数,使用def或lambda表达式创建 内置函数,使用C语言实现的函数,如len 内置方法,使用C语言实现的方法,如dict.get 方 阅读全文
posted @ 2022-03-11 15:34 肖肖凯 阅读(317) 评论(0) 推荐(0)
摘要:lambda表达式创建匿名函数格式 lambda x: func(x) 开头lambda表示这是一个匿名函数 冒号前的x表示函数形参 冒号后的func(x)表示对传入的实参x进行处理并返回 labmda注意事项 lambda函数定义体中只能使用纯表达式,不能赋值也不能用while和try等。 pyt 阅读全文
posted @ 2022-03-11 15:27 肖肖凯 阅读(104) 评论(0) 推荐(0)
摘要:泛映射类型定义 泛映射类型即键值对类型,最常见的当然就是字典,键值对中的键必须是可散列的,可散列对象要满足以下要求: 在此对象的生命周期中,散列值不变 需要实现特殊方法__hash__ 要有__qe__方法 若两个可散列对象相等,则其散列值一定相等 常见可散列对象: 原子不可变数据类型,如str、b 阅读全文
posted @ 2022-03-11 12:24 肖肖凯 阅读(140) 评论(0) 推荐(0)
摘要:数组 这里是指python标准库中的数组,即array.array,而非numpy数组。 如果想要一个只包含数字的列表,那么数组更合适。数组支持所有跟可变序列相关的操作,包括.pop、.insert、.extend。 数组提供从文件读取和存入文件的方法,即.frombytes和.tofile。 创建 阅读全文
posted @ 2022-03-10 18:06 肖肖凯 阅读(101) 评论(0) 推荐(0)
摘要:list.sort方法与内置函数sorted list.sort就地排序列表,返回值None,此是python惯例,就地操作的方法返回None。比如random.shuffle。 内置函数sorted排序后返回一个列表,sorted接受任何形式的可迭代对象作为参数,但返回值都是列表。 list.so 阅读全文
posted @ 2022-03-10 17:24 肖肖凯 阅读(147) 评论(0) 推荐(0)