01 2018 档案
摘要:使用协程建立自己的异步非阻塞模型 接下来例子中,将使用纯粹的Python编码搭建一个异步模型,相当于自己构建的一个asyncio模块,这也许能对asyncio模块底层实现的理解有更大的帮助。主要参考为文末的链接,以及自己的补充理解。 完整代码 1 #!/usr/bin/python 2 # 3 #
阅读全文
摘要:协程 / Coroutine 目录 协程是在一个线程执行过程中可以在一个子程序的预定或者随机位置中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。它本身是一种特殊的子程序或者称作函数。 一个程序可以包含多个协程,可以对比与一个进程包含多个线程。我们知道多个线程相对独立,有自己的上下文,切换
阅读全文
摘要:偏函数 / Partial Function 使用偏函数可以对函数的部分预先知道的参数进行冻结,从而缓存函数参数,而在运行时再释放参数进行使用。所以偏函数适用于需要多次调用同样一个函数且其中一个参数固定已知的情况下。 偏函数的使用方式主要如下, 可以看到,利用偏函数可以生成一个新的函数类,这点在GU
阅读全文
摘要:开放定址散列法和再散列 目录 1 开放定址散列法 前面利用分离链接法解决了散列表插入冲突的问题,而除了分离链接法外,还可以使用开放定址法来解决散列表的冲突问题。 开放定址法在遇见冲突情形时,将会尝试选择另外的单元,直到找到空的单元为止,一般来说,单元h0(X), h1(X), h2(x)为相继尝试的
阅读全文
摘要:分离链接法 / Separate Chain Hashing 前面完成了一个基本散列表的实现,但是还存在一个问题,当散列表插入元素冲突时,散列表将返回异常,这一问题的解决方式之一为使用链表进行元素的存储,即分离链接法。 而在利用链表实现分离链接法时,可选用带表头的链表,插入元素时采用前端插入,每次将
阅读全文
摘要:散列表 / Hash Table 散列表与散列函数 散列表是一种将关键字映射到特定数组位置的一种数据结构,而将关键字映射到0至TableSize-1过程的函数,即为散列函数。 下面以一个简单的散列函数 Hash(Key)=Key mod TableSize为例,完成一个散列表的实现。 Note: 为
阅读全文
摘要:AVL 平衡树和树旋转 目录 1 AVL平衡二叉树 AVL(Adelson-Velskii & Landis)树是一种带有平衡条件的二叉树,一棵AVL树其实是一棵左子树和右子树高度最多差1的二叉查找树。一棵树的不平衡主要是由于插入和删除的过程中产生的,此时则需要使用旋转来对AVL树进行平衡。 插入引
阅读全文
摘要:表达式树和查找树的 Python 实现 目录 1 二叉表达式树 表达式树是二叉树的一种应用,其树叶是常数或变量,而节点为操作符,构建表达式树的过程与后缀表达式的计算类似,只不过在遇到运算符时不是进行计算,而是将树节点赋值为运算符,并将节点的左右叶子指向两个变量构成一个基本的二叉树后再压入栈中。 下面
阅读全文
摘要:二叉树 / Binary Tree 二叉树是树结构的一种,但二叉树的每一个节点都最多只能有两个子节点。 对于二叉树的遍历,主要有以下三种基本遍历方式: 下面将用代码构建一个二叉树,并实现三种遍历方式, 完整代码 1 class TreeNode: 2 def __init__(self, val=N
阅读全文
摘要:队列 / Queue 数组队列 数组队列是队列基于数组的一种实现,其实现类似于数组栈,是一种FIFO的线性数据结构。 下面将使用Python中的list来替代C语言中的数组实现数组队列的数据结构。 Note: 这里的实现并没有像C语言中的申请一块固定大小的数组,手动的定制数组中队列的头尾位置,而是利
阅读全文
摘要:中缀表达式与后缀表达式的转换和计算 目录 1 中缀表达式转换为后缀表达式 中缀表达式转换为后缀表达式的实现方式为: 代码实现过程如下, 完整代码 1 from linked_list_stack import Stack 2 3 SIGN = {'+': 1, '-': 1, '*': 2, '/'
阅读全文
摘要:栈 / Stack 目录 栈是一种基本的线性数据结构(先入后出FILO),在 C 语言中有链表和数组两种实现方式,下面用 Python 对这两种栈进行实现。 1 链表栈 链表栈是以单链表为基础实现的栈数据结构,主要有以下几个关键点: 完整代码 1 class StackEmptyException(
阅读全文
摘要:链表有环与链表相交判断的 Python 实现 目录 1 有环链表 判断链表是否有环可以参考链接, 有环链表主要包括以下几个问题(C语言描述): 下面为关于有环链表几个问题的具体实现代码, 完整代码 1 from linked_list import LinkedList 2 3 4 def chec
阅读全文
摘要:双链表 / Doubly Linked List 目录 1 双链表 双链表和单链表的不同之处在于,双链表需要多增加一个域(C语言),即在Python中需要多增加一个属性,用于存储指向前一个结点的信息。 完整代码 1 from linked_list import LinkedList, test 2
阅读全文
摘要:单链表 / Linked List 目录 链表是一种基本的线性数据结构,在C语言中,这种数据结构通过指针实现,由于存储空间不要求连续性,因此插入和删除操作将变得十分快速。下面将利用Python来完成单链表的实现。 1 单链表 不带表头的单链表通常形式如下, 完整代码 1 class Node: 2
阅读全文
摘要:WebService技术 / WebService Technology 1 关于webservice / Constants WebService是一种跨编程语言和跨操作系统平台的远程调用技术。 WebService主要由以下三种技术构成,XML+XSD,SOAP和WSDL XML+XSD: We
阅读全文
摘要:Python - Matlab 目录 Matlab的官方文档中介绍了Matlab与其余编程语言之间的引擎接口,其中包括对于Python开放的引擎API,可参考官方教程,其中包括引擎安装,基本使用,以及Python与Matlab之间的数据类型转换及交互。 除了使用官网的Matlab引擎来驱动Matla
阅读全文
摘要:组件对象模型 COM 的 Python 调用 关于COM的基本概念,可参考组件对象模型 COM 的内容,下面主要介绍两种使用 Python 调用 COM 组件的方法。 1 使用 win32com 1.1 环境搭建 首先需要搭建Python的环境,需要安装win32com包,前往下载对应版本的安装包。
阅读全文
摘要:动态链接库 / Dynamic Link Library 目录 1 动态链接库简介 / DLL Introduction 动态链接库(Dynamic Link Library, DLL),是微软在Windows操作系统中,实现共享函数库概念的一种方式,在Windows下,这些库函数的扩展名可以是.d
阅读全文
摘要:串口通信 / Serial Communication 1 串口简介 / Serial Introduction 串行接口(Serial Interface)简称串口,通常为COM接口,数据发送方式为一位一位地顺序传送,通信线路简单,一对传输线即可实现双向通信,适用于远距离且传输速度慢的通信。其中最
阅读全文
摘要:VISA仪器控制 / VISA Instrument Control 1 VISA简介 / VISA Introduction VISA(Virtual Instrument Software Architecture,简称为VISA),即虚拟仪器软件结构,是VXI plug&play联盟制定的I/
阅读全文
摘要:matplotlib图像绘制 / matplotlib image description 目录 1 关于matplotlib / About matplotlib Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。相应内容可参
阅读全文
摘要:pandas数据预处理 / pandas data pre-processing 目录 1 关于pandas / About pandas Pandas起源 Python Data Analysis Library或pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。Pan
阅读全文
摘要:NumPy 目录 1 关于numpy / About numpy NumPy系统是Python的一种开源的数值计算扩展包。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。据说Num
阅读全文
摘要:Web服务器 / Web Server 对于Web来说,需要建立一个Web服务器,必须建立一个基本的服务器和一个处理程序, 基本服务器的主要作用是,在客户端和服务器端完成必要的HTTP交互, 处理程序的主要作用是,处理客户端的请求,并返回适当的文件,包括静态/动态文件。 1 建立服务器 / Setu
阅读全文
摘要:Web页面解析 / Web page parsing 1 HTMLParser解析 下面介绍一种基本的Web页面HTML解析的方式,主要是利用Python自带的html.parser模块进行解析。其主要步骤为: 完整代码 代码中首先对模块进行导入,派生一个新的 Parser 类,随后重载方法,当遇到
阅读全文
摘要:统一资源定位符 / URL 目录 1 URL构成 统一资源定位符(Uniform Resource Locator) 是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。现
阅读全文
摘要:正则表达式 / Regular Expression 目录 正则表达式RE(Regular Expression, Regexp, Regex),又称为正规表示法,正规表达式,规则表达式,常规表达式,常规表示法,常简写为regex,regexp或RE。计算机科学的一个概念。正则表达式使用单个字符串来
阅读全文
摘要:is和==的区别 / Difference between is and == 对于Python的对象来说,具有id/type/value三种特性,而在判断两个相等的is和==中,分别是对对象的id和value进行判断,以下例子可以看出两者的不同之处, 从查看的结果来看,x和y的值相同,但是id却不
阅读全文
摘要:可变数据类型作为初始化形参 / Mutable Parameter as Init Formal-para 由于在Python中,没有类似C语言的static静态参数,因此当一个函数需要一个只初始化一次的参数时,通常会在函数外部进行初始化操作,较为不便。 但是在Python中,可以利用可变参数作为函
阅读全文
摘要:and和or / and & or 对于and和or,可以连接多个值,其分别遵循原则: 可以利用这些特性进行一些狡猾的处理,例如print出有效内容,内容无效则显示自定义的字符串。 可参考下面的代码 1 """ 2 The return of 'and' and 'or' 3 As for 'or'
阅读全文
摘要:排序函数 / Sort Function list自带的sort函数可以实现对列表的排列功能,具有同样功能的还有sorted函数。 基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。sort函数是基于原有的列表进行修改,因此
阅读全文
摘要:函数延后估值及字节码分析 在一个循环中定义了函数 f 但是并未对其进行调用,在循环结束后调用,此时i值为3故最终3个函数输出均为9。而非1, 4, 9。 这是由于在定义闭包函数 f 时,传入变量 i,而在循环结束后才调用函数,此时的 i 已为 3,下面使用字节码来查看并论证这一运行顺序。 使用 di
阅读全文
摘要:利用 Python 的字典实现 Switch 功能 Python是没有switch语句的,当遇到需要实现switch语句的功能时,一般可以用if/else进行代替,但是还有一种更加简洁的实现方法,利用字典进行实现,将需要选择的条件设为字典的键,选择的结果设为值,通过字典键索取值的方式实现switch
阅读全文
摘要:关于 import 1 import import可用于导入一个Python的标准模块,包括.py文件或带有__init__.py的文件目录。 在Python中,import一个模块后,若再次import该模块,不会重新加载指定模块,而是把该模块的内存地址给引用到本地环境变量。即其id是相同的。 首
阅读全文
摘要:sqlalchemy 的显式 ORM 访问方式 对于sqlalchemy,可以利用一种显式的ORM方式进行访问,这种方式无需依赖声明层,而是显式地进行操作。还有一种访问方式为声明层 ORM 访问方式。 主要的建立步骤包括: 1. 设置DSN连接网址; 2. 创建引擎,利用引擎对DSN进行连接; 3.
阅读全文
摘要:sqlalchemy的声明层ORM访问方式 sqlalchemy中可以利用声明层进行表格类的建立,并利用ORM对象进行数据库的操作及访问,另一种方式为显式的 ORM 访问方式。 主要的建立步骤包括: 1. 设置DSN连接网址; 2. 创建引擎,利用引擎对DSN进行连接; 3. 创建会话类并绑定到引擎
阅读全文
摘要:建立声明层表对象的两种方式 在对表对象进行建立的时候,通常有两种方式可以完成,以下是两种方式的建立过程对比 首先导入需要的模块,获取一个声明层 两种方法, Note: 此处两种方法都使用声明层作为基类,第一种方法未传入metadata,会自动使用Base.metadata,第二种方法则直接进行了传入
阅读全文
摘要:利用 sqlalchemy 实现关系表查询功能 下面的例子将完成一个通过关系表进行查询的功能,示例中的数据表均在MySQL中建立,建立过程可以使用 SQL 命令或编写 Python 适配器完成。 示例中用到的表主要有3张,一张personInfo个人信息表,一张account_store账号信息表,
阅读全文
摘要:sqlalchemy 的基本使用示例 下面的例子中将利用sqlalchemy进行数据库的连接,通过orm方式利用类实例属性操作的方式对数据库进行相应操作,同时应用一些常用的函数。 完整代码如下: 1 from sqlalchemy import create_engine, exc, orm 2 f
阅读全文
摘要:ORM 与 sqlalchemy 1 关于ORM / About ORM 1.1 ORM定义 / Definition of ORM ORM(Object Relational Mapping),即对象关系映射。简单的说,ORM将数据库中的表与面向对象语言中的类建立了一种对应关系。这样,我们要操作数
阅读全文
摘要:ODBC适配器 / ODBC Adaptor ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问
阅读全文
摘要:SQL_Server适配器 / SQL_Server Adapter 1 环境配置 / Environment Configuration 安装SQL_Server的Python适配器包 Note: 此处采用远程数据库服务器,因此未安装本地SQL_Server 2 SQL_Server实例 / SQ
阅读全文
摘要:MySQL适配器 / MySQL Adapter MySQL是一种关系型数据库,下面主要介绍利用如何利用Python的MySQL适配器来对MySQL进行操作,其余内容可参考文末相关阅读。 1 MySQL环境配置 / Environment Configuration 安装MySQL 首先在官网下载对
阅读全文
摘要:数据库接口 / DB-API 在Python中,数据库是通过适配器(Adaptor)来连接访问数据库的,适配器通常与数据库客户端接口(通常为C语言编写)想连接,而不同的适配器都会尽量满足相同的DB-API标准。 为了保证不同数据库的数据库接口能够通用于适配器,以减少使用不同数据库接口是需要对代码进行
阅读全文
摘要:数据库概述 / Database Overview 1 关于SQL / About SQL 构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的
阅读全文
摘要:cx_freeze cx_Freeze 是一个第三方库,可以用于将 Python 的代码打包成可执行文件,下面介绍如何利用一个脚本文件将 Python 代码变为 exe 可执行文件。 首先,需要安装 cx_freeze,可以使用 pip 进行安装,安装方式如下, 安装完成后,在需要打包的代码同目录下
阅读全文
摘要:pip包管理工具 / pip Package Management Tools pip是一个Python包管理工具,主要是用于安装PyPI上的软件包,可以替代easy_install工具。 1 pip安装 / pip Install pip安装软件: pip安装特定版本的软件: pip安装指定软件包
阅读全文
摘要:Anaconda包管理工具 / Anaconda Package Management Tools Anaconda is the world’s most popular Python data science platform Anaconda的包管工具使得用户可以针对不同的项目进行特定的环境建
阅读全文
摘要:pyinstaller pyinstaller安装方式: 使用方法: 关于pyinstaller添加的参数: -F 制作独立的可执行程序 -D 制作出的档案存放在同一个文件夹下(默认值) -K 包含TCL/TK(对于使用了TK的,最好加上这个选项,否则在未安装TK的电脑上无法运行) -w 制作窗口程
阅读全文
摘要:相关知识 / Relevant Knowledge 1 _vimrc编程 / _vimrc Program 1. 注释符", 用于注释 2. 关键词set, 用于设置功能等 3. 关键词imap, 表示insert模式下的重新map 4. 关键词inoremap, 表示插入模式下的重新map: in
阅读全文
摘要:快捷键 / Shortcut Keys 1 基本操作 / Basic Operation Vim的基本操作主要可以参考以下几张图,参考链接, 命令行模式 i 从光标所在字符前插入 a 从光标所在的字符后插入 o 从光标所在行的下面插入空白行 I 从光标所在行的行首插入 A 从光标所在行的行末插入 O
阅读全文
摘要:环境配置 / Environment Setup 基于Python开发的 gVim 环境配置(Windows) 使用方式参考 Vim 的使用。 1 基于vundle进行配置 Vim有多个扩展管理器,但是强烈推荐Vundle。可以把它想象成Vim的pip。有了Vundle,安装和更新包这种事情不费吹灰
阅读全文
摘要:版本控制 / Version Control 目录 1 git-版本控制 / git-Version Control 关于 Git 教程及理念可参考 Git 的手册 Pro Git,关于git分支的理解可参考第三章,其本质为指针对象。 2 git-常用命令 / git-Freq Command 基本
阅读全文
摘要:利用线程池启动线程 submit与map启动线程 利用两种方式分别启动线程,同时利用with上下文管理来对线程池进行控制 定义foo方法,并运用两种方式启动线程池执行器,其中with tpe(7) as executor语句等价于executor = tpe(), with executor,wit
阅读全文
摘要:concurrent.future 模块 1 thread模块 / thread Module 1.1 常量 / Constants Pass 1.2 函数 / Function Pass 1.3 类 / Class 1.3.1 ThreadPoolExecutor类 类实例化:executor =
阅读全文
摘要:多进程的基本使用 1 subprocess 常用函数示例 首先定义一个子进程调用的程序,用于打印一个输出语句,并获取命令行参数 再定义主函数,即父进程,分别测试 run() / call() / check_call() / getstatusoutput() / getoutput() / cke
阅读全文
摘要:subprocess 模块 0 模块描述 / Module Description From subprocess module: 1 常量 / Constants 1.0 PIPE常量 常量数值: PIPE = -1 常量功能:一个特殊数值,表示需要创建一个pipe。将这个变量传给stdout/s
阅读全文
摘要:使用队列进行任务控制 1 FIFO与LIFO队列 FIFO(First In First Out)与LIFO(Last In First Out)分别是两种队列形式,在FIFO中,满足先入先出的队列方式,而LIFO则是后入先出的队列形式,利用这两种方式可以实现不同的队列功能。 第 1-27 行,首先
阅读全文
摘要:queue 模块 / queue Module 1 常量 / Constants Pass 2 函数 / Function Pass 3 类 / Class 3.1 Queue类 类实例化:queue = queue.Queue(maxsize=0) 类的功能:用于生成一个先入先出队列实例 传入参数
阅读全文
摘要:>>> Blog 随笔原始文档及源代码 -> github: https://github.com/StackLike/Python_Note >>> 统计信息 -> 随笔总篇数: 108 随笔总字数: 181,218 </2017><2018> 随笔字数: 3,461 发布时间: 2018-01-
阅读全文