python 下的数据结构与算法---1:让一切从无关开始
这段时间把《Data Structure and Algorithms with python》以及《Problem Solving with Algorithms and DataStructures》看完了(图那部分没仔细看,毕业设计开始了,有点忙)。现在开始写点总结啦,主要顺序按照是problem solving那本书的,感觉这本条理更加清晰简单,而另一本相对杂乱些,不过其代码写的更pythonic一些。【github地址,包含了那两本书带笔记版以及下面零的代码】
这作为第一篇总结笔记就从点无关的开始吧(也就是这两本书中提到的python相关但是与数据结构和算法无关的东东)【此后我尽量每天晚上更新一篇】
目录:
零:有些什么东西
一:几句对于python的闲语总结
二:python的赋值语句会发生什么
三:类的两种方法:访问方法与突变方法
四:python的变量查找机制
五:python程序运行内存机制
*六:运算符重载&类的内建方法
零:有些什么东西:
一:几句对于python的闲语总结:
Python为解释性语言,用解释器(interpreter)运行
Python为动态语言,程序中不需要固定变量类型,同一个变量前后可以调用不同类型。
Python为面对对象语言,其所有的数据结构都是对象。(注:若看文档遇到Type,其实就是表示class,type是元类,用于构建类。x.__class__.__class__)
二:python的赋值语句会发生什么
赋值语句:x = 6
其实这个过程是建立了一个指向(reference),左边的是指向,右边的是一个对象(object)或者一个有指向对象的指向,可以有多个指向指向同一个对象(object),[注意此地对象的意思,可以是值,实例,函数等等],
综上,此地时建立了一个叫x的变量(variable)让其拥有object 6的reference
注意:
>>> a=[1,2,3,4]
>>> b=a
>>> a[0]=None
>>> b
[None, 2, 3, 4]
此地可以看出,其实指向就是指向了物理地址的一堆东西,一变都变。
三:类的两种方法
所有面对对象语言中都有两种方法:
访问方法(accessor method)与突变方法(mutator method)
访问方法取得对象来用但是不改变对象,而突变方法就是改变对象:
>>> a[::-1]
[5, 4, 3, 2, 1]
>>> a
[1, 2, 3, 4, 5]
>>> a.reverse()
>>> a
[5, 4, 3, 2, 1]
其实自己写过类就能够发现这两种的不同,大概访问方法就是用来return一些想要的值的,突变方法是用来改变对象内容的,一般也可以不return。
一个类如果没有访问方法那就是只能放数据不能取数据,那没什么意义。而一个类如果没有突变方法那就是不可变数据了,str,int等等数据类型就是这样的。
四:python的变量查找机制
python变量查找最先分为两步:首先在local scope查找,如绿色的val,先在绿色区域查找,没有再在encloding scope查找,即是浅红色区域
前面说到了local scope与enclosing scope,其实我们最熟的是global scope,即全局变量
用法:
x=0
def aha():
global x
…
最后有python的Build-in scope:
例如在函数中写了x=int(‘6’),
会依次寻找对象int函数是否在local scope,enclosing scope,
Global scope,最后看build-in scope
总结起来就是LEGB的查找顺序。
五:python的内存机制
从中也可以看出其实每个函数或者类都有个自己的内存空间,其实python在运行时,将使用两部分来运行,其都是在RAM(随机存储器)中的,两部分就是一个heap(堆)以及一个run-time stack(时间运行堆),当python解释器(interpreter)执行到某个函数是,将其对应的Activation Record压入run-time stack并且开辟一段新的scope,注意,所有local scope拥有的object都存储在Heap中,Activation Record中有他们的references,一旦函数执行完成,Activation Record弹出,下一个进入时会指向另一段scope。【见下图】
*说到RAM,如果你没有概念,先知道他可以以O(1)时间访问任意地址的元素即可,这很重要,直接说明了为何有些数据结构访问元素时间复杂度为O(1)
e.g:看下面递归的内存处理过程
def recSumFirstN(n):
if n == 0:
return 0
return recSumFirstN(n-1) + n
*六:运算符重载&类的内建方法
下表写明了一些常见的内建方法,在这里我讲了其中的一些
python 下的数据结构与算法---1:让一切从无关开始的更多相关文章
- python 下的数据结构与算法---8:哈希一下【dict与set的实现】
少年,不知道你好记不记得第三篇文章讲python内建数据结构的方法及其时间复杂度时里面关于dict与set的时间复杂度[为何访问元素为O(1)]原理我说后面讲吗?其实就是这篇文章讲啦. 目录: 一:H ...
- python 下的数据结构与算法---4:线形数据结构,栈,队列,双端队列,列表
目录: 前言 1:栈 1.1:栈的实现 1.2:栈的应用: 1.2.1:检验数学表达式的括号匹配 1.2.2:将十进制数转化为任意进制 1.2.3:后置表达式的生成及其计算 2:队列 2.1:队列的实 ...
- python 下的数据结构与算法---6:6大排序算法
顶先最后推荐:哈哈,意思是放到顶部强调其重要性,但是应该我总结的六种算法看完了后再看的一篇醍醐灌顶的文章 一:冒泡排序(Bubble Sort) 原理:假设有n个数,第一轮时:从第一个元素开始,与相邻 ...
- python 下的数据结构与算法---3:python内建数据结构的方法及其时间复杂度
目录 一:python内部数据类型分类 二:各数据结构 一:python内部数据类型分类 这里有个很重要的东西要先提醒注意一下:原子性数据类型和非原子性数据类型的区别 Python内部数据从某种形式上 ...
- python 下的数据结构与算法---2:大O符号与常用算法和数据结构的复杂度速查表
目录: 一:大O记法 二:各函数高阶比较 三:常用算法和数据结构的复杂度速查表 四:常见的logn是怎么来的 一:大O记法 算法复杂度记法有很多种,其中最常用的就是Big O notation(大O记 ...
- python 下的数据结构与算法---7:查找
一:线性查找(Sequential Search) 线性查找可以说是我们用的最早也会是用的最多的查找方式了.其对应的是线性数据结构,回顾一下线性数据结构,其特点是先后加入的元素是有顺序的,相邻的.而线 ...
- python 下的数据结构与算法---5:递归(Recursion)
定义:递归就是不断分割整体成部分直到可以轻易解决分割出来的部分. 递归表达式三定律: 1:递归表达式必须有个最小单元 (最小单元既是停止递归调用以及能够直接运算的) 2:递归表达式在运算过程中 ...
- Python实现的数据结构与算法之队列详解
本文实例讲述了Python实现的数据结构与算法之队列.分享给大家供大家参考.具体分析如下: 一.概述 队列(Queue)是一种先进先出(FIFO)的线性数据结构,插入操作在队尾(rear)进行,删除操 ...
- 用Python实现的数据结构与算法:开篇
一.概述 用Python实现的数据结构与算法 涵盖了常用的数据结构与算法(全部由Python语言实现),是 Problem Solving with Algorithms and Data Struc ...
随机推荐
- MySQL 列子查询及 IN、ANY、SOME 和 ALL 操作符的使用
列子查询是指子查询返回的结果集是 N 行一列,该结果通常来自对表的某个字段查询返回. 一个列子查询的例子如下: SELECT * FROM article WHERE uid IN(SELECT ui ...
- 1、CentOS6.5系统安装及学习
1. CentOS6.5系统安装及学习 1.需要的工具,Vmware workstation12虚拟机,CentOS6.5 ISO镜像,选择的是32位系统. 2.下载CentOS6.5地址:htt ...
- phpEXCEL操作全解
phpExcel中文帮助手册,列举了各种属性,以及常用的操作方法,难得是每一个都用实例加以说明,希望对大家有所帮助. phpExcel中文帮助手册,不可多得的好文章,供大家学习参考. 1.设置exce ...
- php 异常捕获
1 首先是try,catch <?php $path = "D:\\in.txt"; try //检测异常 { file_open($path); } catch(Excep ...
- Python自动化运维之4、格式化输出、文件对象
Python格式化输出: Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[P ...
- _CrtDumpMemoryLeaks报告程序中的内存泄露问题(简单示例代码)
// .h 文件 #pragma once class CConsoleDump { public: explicit CConsoleDump(LPCTSTR lpszWindowTitle = N ...
- MFC基本框架
MFC基本框架 By 小戴 发表于 2006-12-21 15:59:00 MFC 应用程序框架 1. MFC 简介: MFC ( Microsoft Foundation Class )是由 ...
- PERL DBI 自动重连问题
[root@wx03 mojo]# cat relink.pl use Mojolicious::Lite; use JSON qw/encode_json decode_json/; use Enc ...
- BZOJ3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛
3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 30 Solved: 17[Sub ...
- cxgrid按条件计算合计值 TcxTreeList计算合计值
在Footer的第一列显示[合计:] 加一个Summary项,Column设为Grid的第一列,Kind设为skNone 在该Summary项的OnGetText事件中,输入: procedure T ...