03 2022 档案
摘要:操作系统接口连接的不是用户 用户通过命令行、图形按钮、应用程序等使用计算机,shell和图形界面本质也是程序,在操作系统启动之后就会一直运行的程序。 用户通过程序来使用操作系统接口 操作系统接口 用户通过程序使用计算机,一般与操作系统直接交互的就是一些普通的C代码与一些重要的函数,这些重要的函数就是
阅读全文
摘要:什么是操作系统? 系统软件 操作系统是计算机硬件与应用软件之间的一层软件,用来管理各种硬件以及给应用软件提供统一的接口。 冯诺伊曼存储程序思想 即将程序和数据放到计算机内粗存储器中,计算机在程序的控制下一步一步进行处理,基本步骤是不断地取值执行。 计算机启动过程 BIOS 计算机刚上电时处于实模式,
阅读全文
摘要:split命令 Linux中的split命令用于将一个大文件切割成若干个小文件,一般用于切割文本文件,有两种切割模式: 按字节数切割,即按文件大小切割 按行数切割 split按字节数切割 格式如下 split -b [size] filename 例子 如上图中test.txt大小为14k,按照2k
阅读全文
摘要:前言 本文讨论python中的流程控制特性,主要包括两个方面: with语句和上下文管理器,with语句会设置一个临时的上下文,交给上下文管理器控制,并且负责清理上下文。 for while try 语句中的else子句 if语句之外的else块 for/else 只有当for循环运行完毕,即没有被
阅读全文
摘要:迭代器模式 迭代器模式与yield关键字 扫描内存中放不下的数据集时,需要惰性获取数据,即按需一次获取一个数据项,这就是迭代器模式。 python为了实现迭代器模式,加入了yield关键字,用于构建生成器。 所有生成器都是迭代器,因此生成器完全实现了迭代器接口。 一般认为,迭代器用于从一个集合中取出
阅读全文
摘要:不要子类化内置类型 python2.2之前,内置类型不能子类化 python2.2之后可以子类化,但是内置类型的方法无法调用其子类覆盖的方法 如下例子,内置类型dict的__init__和__update__方法会忽略子类覆盖的__setitem__方法 因此,不要直接子类化内置类型,内置类型的方法
阅读全文
摘要:接口与协议定义 接口 类实现或继承的公开属性,包括特殊方法,都是类的接口。即可以为外界所知的都是接口。受保护的属性和私有属性不是接口,虽然在python中并没有真正的受保护属性和私有属性。接口有两类,一类是正式的,即抽象基类。一类是非正式的,即协议。 协议 协议也是接口,但不是正式的,协议只由文档了
阅读全文
摘要:__hash__ 要让对象可散列,就要实现其__hash__方法,常用方案是将对象中各个分量的散列值异或,构成整个向量对象的散列值。 其中reduce是归约函数,其有三个参数,第一个是有两个操作数的函数,第二个是可迭代对象,第三个是可迭代对象为空时返回的默认值。 operator模块以函数的形式提供
阅读全文
摘要:python中属性查找流程 对于my_obj.x表达式,首先检查my_obj实例中有没有名为x的实例属性 如果上一步没找到,检查对应的类中有没有名为x的类属性,因为类属性可以作为实例属性的默认值 如果上一步没找到,沿着继承树继续查找...... 如果仍找不到,则会调用__getattr__方法。 _
阅读全文
摘要:python协议 在python中创建功能完善的序列类型无需使用继承,只需实现符合序列协议的方法。 在面向对象编程中,协议是非正式的接口。非正式是指跟抽象基类不一样,协议只在文档中定义,不在代码中定义。 python中,只要实现了__len__和__getitem__两个特殊方法,则可认为该类是序列
阅读全文
摘要:定义__slots__类属性 默认情况下,python中每个实例都用一个字典__dict__来存储所有的实例属性,但是由于字典底层是哈希表,是一种空间换时间的策略,如果程序中有非常多的实例,则内存消耗巨大。解决访问是使用__slots__类属性。 __slots__的原理是让解释器以元组的形式存储实
阅读全文
摘要:python中property装饰器用于将一个方法变成一个相同名称的只读属性。 如下例子中,由于__x和__y是私有属性,不能直接访问。于是用property装饰器来修饰两个相同名称的方法,保持了python的一致性。可以直接用self.x和self.y来访问。
阅读全文
摘要:python中类方法和静态方法都是用装饰器来定义。 classmethod装饰器定义类方法,classmethod修饰的方法的第一个参数一定是类本身,一般命名为cls,但实际上可以随意取名。常见用途是创建备选构造方法。 staticmethod定义静态方法,静态方法就是写在类里,由类名调用的普通函数
阅读全文
摘要:对象表示形式即用字符串形式来表示一个对象,每种面向对象语言都至少有一种获取对象的字符串表示形式的方式,python中获取字符串表示形式的方法如下: repr()。以便于开发者理解的形式返回对象的字符串表示形式。底层是__repr__。 str()。以便于用户理解的形式返回字符串表示形式。底层是__s
阅读全文
摘要:del命令与垃圾回收 del命令只会删除对象的引用,但是不会删除对象。但是删除引用有可能导致对象被删除。 python对象被删除有两种情况: 某个对象的引用计数为零 一组对象之间全是相互引用,导致组中对象不可取 两种情况可以归为一种,如果某个对象不可获取了,那么将会被当作垃圾回收。 尽量不要自己实现
阅读全文
摘要:python变量与对象 对象是盒子,变量是标签 在python中,对象指的是一块内存区域,变量则是贴在这块区域上的标签,用来引用这片区域的值。 python中的赋值语句,因为对象总是在=右边,变量在等号左边,因此对象总是先于变量创建,正确说法是把某变量分配给某对象,而不是反过来。 对象的标识、类型和
阅读全文
摘要:装饰器 装饰器定义 python装饰器本质就是一个高阶函数,其一般以一个函数为参数,返回另一个函数,返回值可以是对原函数的改造,也可以跟原函数毫无关系。如下两种代码效果完全等价: @decorate def target(): print("running target()") def target
阅读全文
摘要:什么是一等对象? 满足下列条件的为一等对象: 在运行时创建 能复制给变量或数据结构中的元素 能作为参数传递给函数 能作为函数的返回结果 python中的一等对象 整数、字符串、字典等都是一等对象。 所有的函数都是一等对象,有时简称为一等函数,但是要注意并没有二等三等函数的说法。 函数对象都属于类fu
阅读全文
摘要:判断是否为可调用对象 能用调用运算符()的即为可调用对象 使用内置的callable()函数判断是否是可调用对象。 python数据模型七种可调用对象 用户定义的函数,使用def或lambda表达式创建 内置函数,使用C语言实现的函数,如len 内置方法,使用C语言实现的方法,如dict.get 方
阅读全文
摘要:lambda表达式创建匿名函数格式 lambda x: func(x) 开头lambda表示这是一个匿名函数 冒号前的x表示函数形参 冒号后的func(x)表示对传入的实参x进行处理并返回 labmda注意事项 lambda函数定义体中只能使用纯表达式,不能赋值也不能用while和try等。 pyt
阅读全文
摘要:泛映射类型定义 泛映射类型即键值对类型,最常见的当然就是字典,键值对中的键必须是可散列的,可散列对象要满足以下要求: 在此对象的生命周期中,散列值不变 需要实现特殊方法__hash__ 要有__qe__方法 若两个可散列对象相等,则其散列值一定相等 常见可散列对象: 原子不可变数据类型,如str、b
阅读全文
摘要:数组 这里是指python标准库中的数组,即array.array,而非numpy数组。 如果想要一个只包含数字的列表,那么数组更合适。数组支持所有跟可变序列相关的操作,包括.pop、.insert、.extend。 数组提供从文件读取和存入文件的方法,即.frombytes和.tofile。 创建
阅读全文
摘要:list.sort方法与内置函数sorted list.sort就地排序列表,返回值None,此是python惯例,就地操作的方法返回None。比如random.shuffle。 内置函数sorted排序后返回一个列表,sorted接受任何形式的可迭代对象作为参数,但返回值都是列表。 list.so
阅读全文
摘要:python中+和* python中序列都支持 + 和 * 操作。 + 拼接两个序列,返回拼接后的序列 * 将一个序列复制几份,然后拼接 + 和 * 都不改变原有序列对象。 含有可变元素的容器序列对象不可用* 因为容器序列中保存的是元素的引用,如果直接用 * 复制容器对象再拼接,则会得到几份相同的引
阅读全文
摘要:引言 python的核心特点之一是对序列数据类型的支持,而切片是对序列数据类型的一个很重要的操作。 python中序列类型切片基本格式为: l[begin:end:step] 起始索引,结束索引,步长,分别用冒号隔开。 切片索引左闭右开 切片时会取到索引为begin的元素,但是只能取到end-1索引
阅读全文
摘要:元组作为不可变列表 一般情况下,我们都认为元组就是不可改变的列表,除了与增删相关的方法外,元组几乎支持列表的其它所有方法。 此外有一个例外,元组并没有特殊方法__reversed__,但是仍然可以用reversed(my_tuple)来获取一个逆序元组,此时并没有改变元组my_tuple,而是返回一
阅读全文
摘要:引言 列表推导式只能用于构建列表,生成器表达式则可以用来创建任何类型的序列。 列表推导式 列表推导式格式 列表推导式是构建列表的一种快捷方式,具体格式如下: l = [func(x) for x in it] 其中it是一个可迭代对象 x是循环中用于迭代的变量 func是对迭代的每一个值做的操作,当
阅读全文
摘要:引言 有时候一行python代码很长,需要分成多行。 用反斜杠链接多行代码 a = 1 + 2\ +3 print(a) 用小括号括起来 python会忽略代码中() [] {}里的换行。 a = (1 + 2 +3) print(a)
阅读全文
摘要:引言 python的核心语言特色之一是对序列数据类型的支持,只要实现了__getitem__和__len__,就可以认为是一种序列类型。按照不同的分类标准可以将python中内置的序列类型分为以下几类。 按照序列能否存放不同类型对象 容器序列 list、tuple、collections.deque
阅读全文
摘要:__init__虽然一直被称为构造方法,但是其本质是初始化方法。 __new__是真正的构造方法,是一种类方法,其返回值是一个实例,__new__方法的返回值会传给__init__方法中的形参self。
阅读全文
摘要:python类属性与实例属性 定义 class A: class_name = "calss" # 类属性 def __init__(self): self.object_name = "object" # 实例属性 if __name__ == "__main__": print(A.class_
阅读全文
摘要:#三个核心函数 torch.save() torch.load() torch.nn.Module.load_state_dict() 状态字典定义 状态字典本质上就是普通的python字典。 对于具有可学习参数的网络层来说,状态字典的键就是网络层,值就是对应的参数张量。 大概如下图所示,网络层的可
阅读全文
摘要:python标准库sys模块 sys.argv 命令行参数列表,第一个元素是程序本身路径 sys.exit(n) 退出程序 sys.version 获取python解释器版本信息 sys.maxint 最大的int值 sys.path 返回模块搜索路径,初始值为PYTHONPATH环境变量的值 sy
阅读全文
摘要:引言 XML也好,JOSN、YAML也好,本质上都是文本文件,用于数据传输。它们与txt这种文本文件的区别是,它们规范了数据格式,使得数据具有结构性,方便读取和处理。XML、JSON、YAML的不同之处只是它们规定的数据格式不同,即语法不同。 XML XML定义 XML是可扩展性标记语言。 发明XM
阅读全文
摘要:python3.X中已经默认继承object类,以下三种写法等价: class Person(object):pass class Person():pass class Person:pass
阅读全文
摘要:python程序第一次运行之后当前目录下会生成__pycache__文件夹,里边是pyc或pyo文件。 如上图,代表python解释器是CPyhon3.7。 由于python程序运行时不需要先编译成二进制代码,而是直接由解释器编译成字节码(PyCodeObject)然后送入内存。运行完备后会写入到磁
阅读全文
摘要:python中的深拷贝与浅拷贝与C&C++中略有不同,后者主要是对于指针指向内存空间的重新开辟,否则两个指针会共享一块内存,而python中是三种不同层次的共享。其中直接复制是用 = ,浅拷贝和深拷贝则要使用copy模块实现。 直接赋值 d = {'country':'China', 'age':
阅读全文
摘要:是python中字典类的方法。 对一个字典调用items()方法: d = {'country':'China', 'age': '18', 'name': 'Kang'} print(d.items()) print(type(d.items())) print(isinstance(d.item
阅读全文
摘要:#一、基于同态加密(Homomorphic Encryption, HE)的安全机制 同态加密指的是直接对加密数据进行处理,然后再解密,得到的结果跟直接处理明文的效果相匹配。如下图所示,同态加密处理流程和明文状态处理流程的区别在于数据输入之前的加密和输出之后的解密步骤。 ##同态加密的定义 一个同态
阅读全文
摘要:#一、联邦学习定义 联邦学习是利用分散在各个参与协作方的数据集,通过隐私保护技术融合多方数据信息,协同构建全局模型的一种分布式训练方式。模型的相关信息(模型参数,结构,参数梯度等)能够在各参与方之间(可以明文、加密、 添加噪声等)交换,但是本地训练数据集不会移动。即数据不动模型动,数据可用不可见。
阅读全文
浙公网安备 33010602011771号