
python&&torch
文章平均质量分 92
python与pytorch
罗古洞的女婿
保持热情
展开
-
流畅的python笔记(二十一)类元编程
目录前言一、类工厂函数二、定制描述符的类装饰器三、导入时和运行时比较场景练习场景1解答场景2解答四、元类基础知识场景练习场景3解答场景4解答五、定制描述符的元类六、元类的特殊方法__prepare__七、类作为对象前言类元编程是指在运行时创建或定制类的技艺。python中类是一等对象,因此任何时候都可以使用函数新建类,而无需使用class关键字。类装饰器也是函数,不过能够审查、修改甚至把被装饰的类替换成其他类。 最后,元类是...原创 2021-11-10 21:48:24 · 2968 阅读 · 0 评论 -
流畅的python笔记(二十)属性描述符
前言描述符是对多个属性运用相同存取逻辑的一种方式。 描述符是实现了特定协议的类,这个协议包括__get__、__set__和__delete__方法。property类实现了完整的描述符协议。描述符是python的独有特征,不仅在应用层使用,在语言的基础设施中也有用到。一、描述符示例:验证属性LineItem类第三版:一个简单的描述符实现了__get__、__set__、__delete__方法的类是描述符。描述符的用法是,创建一个实例,作为另一个类的类属性。下面例子中,我...原创 2021-11-10 12:34:25 · 859 阅读 · 0 评论 -
流畅的python笔记(十九)动态属性和特性
前言python中,数据的属性和处理数据的方法统称属性attribute,即方法只是可调用的属性。除了这二者之外,我们还可以创建特性property,在不改变类接口的前提下,使用存取方法(即读值方法和设值方法)修改数据属性。 python使用点号访问属性时,比如obj.attr,python解释器会调用特殊的方法(如__getattr__和__setattr__)计算属性。用户自定义的类可以通过__getattr__方法实现虚拟属性,当访问不存在的属性时,即时计算属性的值。 ...原创 2021-11-08 22:13:16 · 1091 阅读 · 0 评论 -
流畅的python笔记(十七)使用期物处理并发
目录前言一、网络下载的三种风格依序下载的脚本使用concurrent.futures模块的下载脚本flags_threadpool.py期物在哪里二、阻塞型IO和GIL三、使用concurrent.futures模块启动进程四、实验Executor.map方法五、显示下载进度并处理错误前言本章讨论concurrent.futures模块。期物的概念:期物指一种对象,表示异步执行的操作,是concurrent.futures模块和asynicio包的基础。一原创 2021-11-02 16:55:31 · 1057 阅读 · 0 评论 -
流畅的python笔记(十六)协程
一、生成器如何进化成协程python2.5以后,yield关键字可以在表达式中使用,而且生成器API增加了.send(value)方法。生成器的调用方可以使用.send()方法发送数据,发送的数据会成为生成器函数中yield表达式的值。因此生成器可以作为协程使用。协程是指一个过程,这个过程与调用方协作,产出由调用方提供的值。 除了.send()方法外,还添加了.throw()和.close()方法:send()方法,调用方使用send方法发送数据,该数据会成为生成器函数中yield...原创 2021-11-01 21:23:21 · 1036 阅读 · 0 评论 -
流畅的python笔记(十五)上下文管理器和else块
前言本章讨论python中的流程控制特性:with语句和上下文管理器,with语句会设置一个临时的上下文,交给上下文管理器对象控制,并且负责清理上下文。 for、while、try语句的else子句。一、if语句之外的else块...原创 2021-10-31 15:25:55 · 220 阅读 · 0 评论 -
流畅的python笔记(十四)可迭代的对象、迭代器和生成器
前言迭代器模式:扫描内存中放不下的数据集时,要找到一种惰性获取数据项的方式,即按需一次获取一个数据项,这就是迭代器模式。python为了抽象出迭代器模式,加入了关键字yield,这个关键字用于构建生成器,其作用与迭代器一样。所有生成器都是迭代器,因为生成器完全实现了迭代器接口。根据《设计模式:可复用面向对象软件的基础》中的定义,迭代器用于从一个集合中取出元素,生成器则用于凭空生成元素,但在python社区中,大多时候把迭代器和生成器视作同一概念。 在python3中...原创 2021-10-30 00:05:09 · 904 阅读 · 0 评论 -
流畅的python笔记(十三)正确重载运算符
一、运算符重载基础python对运算符重载加了一些限制。不能重载内置类型的运算符 不能新键运算符,只能重载现有的 某些运算符不能重载------is、and、or、not(位运算符&、|、~可以)原创 2021-10-28 09:57:08 · 931 阅读 · 0 评论 -
流畅的python笔记(十二)继承的优缺点
目录一、子类化内置类型很麻烦二、多重继承和方法解析顺序三、多重继承的真实应用四、处理多重继承五、Django通用视图中的混入一、子类化内置类型很麻烦python2.2之前,内置类型不能子类化。python2.2以后内置类型可以子类化了,但是内置类型的方法不会调用子类覆盖的方法,比如下边例子,用继承的内置类型的方法无法调用覆盖的内置类型的方法。DoppelDict继承内置的dict类型,它会把存入的值重复一下,即[1, 2]变成[1, 2, 1, 2],并且具体的实现委托给原创 2021-10-27 21:13:23 · 338 阅读 · 0 评论 -
流畅的python笔记(十一)接口:从协议到抽象类型
一、python文化中的接口与协议接口定义:每个类都有接口,类实现或继承的公开属性(方法或数据属性),包括特殊方法,都是接口。受保护的属性和私有属性不在接口中(即便在python并不存在真正受保护的和私有的属性,而只是采用命名约定实现的)。接口补充定义:对象公开方法的自己,让对象在系统中扮演特定的角色。python文档中的文件类对象或可迭代对象就是指这样一些类,它们实现了文件类对象的方法集合或可迭代需要的方法集合。协议是接口,但不是正式的,只由文档和约定定义。比如序列协议,是python最基础的原创 2021-10-27 18:24:18 · 801 阅读 · 0 评论 -
流畅的python笔记(十)序列的修改、散列和切片
前言本章定义表示多维向量的Vector类,其中的元素是浮点数,将支持以下功能:基本的序列协议------__len__和__getitem__ 正确表述拥有很多元素的实例 适当的切片支持,用于生成新的Vector实例 综合各个元素的值计算散列值 自定义的格式语言扩展此外,还将通过__getattr__方法实现属性的动态存取,虽然序列类型通常不会这么做。一、Vector类:用户定义的序列类型二、Vector类第一版:与Vector2d兼容这里故意不让Vector的构造方法和Vec原创 2021-10-24 15:26:28 · 2435 阅读 · 0 评论 -
流畅的python笔记(九)符合python风格的对象
目录前言一、对象表示形式二、再谈向量类三、备选构造方法四、classmethod与staticmethod五、格式化显示六、让Vector2d可散列七、python的私有属性和”受保护“属性八、使用__slots__类属性节省空间定义类属性__slots__使用__slots__的问题九、覆盖类属性前言本章接续第一章,说明如何实现很多python类型中常见的特殊方法。包含以下话题:支持用于生成对象其他表示形式的内置函数(repr()、byte()等原创 2021-10-20 17:59:45 · 642 阅读 · 0 评论 -
流畅的python笔记(八)对象引用、可变性和垃圾回收
一、变量不是盒子python中变量不是盒子,而是盒子上贴的标签。对象才是盒子。对象一般是指一块存储空间,变量是对象上贴的标签,一个对象可以贴好多个标签,即可以对应很多个变量名。如下例子,把变量a和b分配给了同一个列表对象,类似于C++中的引用概念,python中的变量的本质都是C++中的引用。因为对象在右边,总是先于变量创建,因此正确说法是把某变量分配给某对象,而不是反过来。二、标识、相等性和别名...原创 2021-10-19 23:39:07 · 414 阅读 · 1 评论 -
流畅的python笔记(七)函数装饰器和闭包
前言函数装饰器用于在源码中“标记”函数,以某种方式增强函数的行为。要掌握装饰器,必须了解闭包,必须知道nonlocal关键字。一、装饰器基础知识装饰器是可调用的对象,其参数是被装饰的函数,因此装饰器可以认为是一种特殊的高阶函数。装饰器可能会处理被装饰的函数,然后把它返回,或者将其替换成另一个函数或可调用对象。假如有个名为decorate的装饰器:@decoratedef target(): print("running target()")上述代码如下述代...原创 2021-10-18 22:34:58 · 359 阅读 · 0 评论 -
流畅的python笔记(六)使用一等函数实现设计模式
目录一、重构策略模式经典策略模式使用作为对象的函数实现策略模式自动选择最佳策略找出模块中的全部策略globals()使用单独模块专门保存所有策略二、命令模式总结一、重构策略模式经典策略模式策略模式的定义是:定义 一系列算法(策略),把它们一一封装起来,并且使它们可以相互替换。策略模式使得算法可以独立于使用它的客户而变换,即不同的客户都可以使用某个算法或其它算法。 下面是一个电商领域使用策略模式的例子。策略模式设计的内容如下:...原创 2021-10-18 00:41:52 · 188 阅读 · 0 评论 -
流畅的python笔记(五)一等函数
前言“一等对象”是指满足下述条件的程序实体:在运行时创建 能赋值给变量或数据结构中的元素 能作为参数传给函数 能作为函数的返回结果在python中,整数、字符串、字典等都是一等对象,这跟其它编程语言一致,但是python中的所有函数也是一等对象,或者可以称之为一等函数(所有函数都是一等函数,不存在二等三等函数的说法)。一、把函数视作一等对象def factorial(n): '''returns n! good!''' return 1 if n < 2 el原创 2021-10-17 22:26:00 · 582 阅读 · 0 评论 -
流畅的python笔记(四)文本和字节序列
一、字符问题原创 2021-10-14 22:50:46 · 1230 阅读 · 0 评论 -
流畅的python笔记(三)字典和集合
一、泛映射类型collections.abc模块中有Mapping和MutableMapping两个抽象基类,他们的作用是为dict和其它泛映射类型定义形式接口。可以用isinstance函数来判定某个对象是不是泛映射类型import collectionsmy_dict = {}print(isinstance(my_dict, collections.Mapping))# 输出True所谓泛映射类型即键值对类型。泛映射类型中键必须是可散列的,可散列对象有三点要求:第一:原创 2021-10-08 11:30:10 · 894 阅读 · 0 评论 -
流畅的python笔记(二)数据结构
一、内置序列类型概览python的核心特点之一是对序列数据类型的支持。按照序列能否存放不同类型对象分类:容器序列list、tuple和collections.deque,这些是容器序列类型,同一个序列对象中可以存放不同类型的数据。扁平序列 str、bytes、bytearray、memoryview和array.array,这些是扁平序列类型,这种一个序列对象中只能容纳一种类型。 容器序列存放的是其所包含的任意类型对象的引用,而扁平序列...原创 2021-09-16 16:33:05 · 1180 阅读 · 0 评论 -
流畅的python笔记(一)Python数据模型
一、python最好的品质之一是一致性没有仔细去查看一致性的具体解释,仅以自己理解,以书上的一个例子来说吧,在python中用len(collection)来得到序列行对象collection的序列长度。len是python的标准库内置函数。对于python中的所有序列数据对象(无论是内置或者自定义类对象),求其长度的方法都是用内置的len函数,而不是有些用collection.size(),有些用collection.length()等。所以当我们看到代码中用了len(collection)时,即便c原创 2021-09-12 17:37:05 · 608 阅读 · 0 评论 -
线性回归二三事
目录一、线性回归定义二、概率角度看线性回归三、线性回归正则化四、贝叶斯角度看正则化五、线性回归扩展一、线性回归定义目标:给定一个数据集(具有样本和标签的有监督数据集),拟合出一条最符合给定数据的直线(本质就是拟合出一条最符合所有样本与其标签的函数,当然这里的直线是广义直线,数据样本一般都不是一维的)。如上图,目标就是拟合出f(w),即目标就是根据一个采样得到的数据集来估计出参数向量w的值。参数估计方法:最小二乘法,即参数估计中的最小二乘估计。一种直观的解释是.原创 2021-07-22 20:50:57 · 1083 阅读 · 2 评论 -
python&numpy&torch数据操作
目录python基础数据类型numpy多维数组torch中的Tensortorch中tensor操作算术操作,以加法为例索引操作改变形状运算内存开销Tensor与numpy互相转换tensor 转 numpynumpy转tensortensor可以放到GPU上由于在机器学习领域,python中的基础数据类型一般要转换成numpy中的多维数组或者torch的tensor来计算,本来简要描述其中的一些要点。https://tangshusen.me/...原创 2021-08-24 23:47:08 · 1041 阅读 · 0 评论 -
python导入模块
python中一个.py文件是一个模块,一个拥有__init__.py文件的文件夹是一个包,也可以认为是一个模块,这两种模块都是可以导入到其它模块中的。首先讲讲普通A.py模块。# A.pydef A1(): print("this is A1")class A2: name = "I am A2"x = "A's member" 如果要在其它模块中使用A.py模块中的类,函数,变量等,需要将模块A导入其它模块,导入方法有精确导入和模糊...原创 2021-08-24 23:14:55 · 608 阅读 · 0 评论