这段时间把《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:让一切从无关开始的更多相关文章

  1. python 下的数据结构与算法---8:哈希一下【dict与set的实现】

    少年,不知道你好记不记得第三篇文章讲python内建数据结构的方法及其时间复杂度时里面关于dict与set的时间复杂度[为何访问元素为O(1)]原理我说后面讲吗?其实就是这篇文章讲啦. 目录: 一:H ...

  2. python 下的数据结构与算法---4:线形数据结构,栈,队列,双端队列,列表

    目录: 前言 1:栈 1.1:栈的实现 1.2:栈的应用: 1.2.1:检验数学表达式的括号匹配 1.2.2:将十进制数转化为任意进制 1.2.3:后置表达式的生成及其计算 2:队列 2.1:队列的实 ...

  3. python 下的数据结构与算法---6:6大排序算法

    顶先最后推荐:哈哈,意思是放到顶部强调其重要性,但是应该我总结的六种算法看完了后再看的一篇醍醐灌顶的文章 一:冒泡排序(Bubble Sort) 原理:假设有n个数,第一轮时:从第一个元素开始,与相邻 ...

  4. python 下的数据结构与算法---3:python内建数据结构的方法及其时间复杂度

    目录 一:python内部数据类型分类 二:各数据结构 一:python内部数据类型分类 这里有个很重要的东西要先提醒注意一下:原子性数据类型和非原子性数据类型的区别 Python内部数据从某种形式上 ...

  5. python 下的数据结构与算法---2:大O符号与常用算法和数据结构的复杂度速查表

    目录: 一:大O记法 二:各函数高阶比较 三:常用算法和数据结构的复杂度速查表 四:常见的logn是怎么来的 一:大O记法 算法复杂度记法有很多种,其中最常用的就是Big O notation(大O记 ...

  6. python 下的数据结构与算法---7:查找

    一:线性查找(Sequential Search) 线性查找可以说是我们用的最早也会是用的最多的查找方式了.其对应的是线性数据结构,回顾一下线性数据结构,其特点是先后加入的元素是有顺序的,相邻的.而线 ...

  7. python 下的数据结构与算法---5:递归(Recursion)

    定义:递归就是不断分割整体成部分直到可以轻易解决分割出来的部分. 递归表达式三定律: 1:递归表达式必须有个最小单元     (最小单元既是停止递归调用以及能够直接运算的) 2:递归表达式在运算过程中 ...

  8. Python实现的数据结构与算法之队列详解

    本文实例讲述了Python实现的数据结构与算法之队列.分享给大家供大家参考.具体分析如下: 一.概述 队列(Queue)是一种先进先出(FIFO)的线性数据结构,插入操作在队尾(rear)进行,删除操 ...

  9. 用Python实现的数据结构与算法:开篇

    一.概述 用Python实现的数据结构与算法 涵盖了常用的数据结构与算法(全部由Python语言实现),是 Problem Solving with Algorithms and Data Struc ...

随机推荐

  1. 软件测试 homework1

    申明数组变量后,在使用的时候,出现了向上溢出的情况(程序运行过程中出现的),导致最后答案不正确,经过输出数组数据发现错误, 现在在申明数组的时候都会大致估算一下,确认申明什么样的数组不会导致溢出. 在 ...

  2. QT5在VS2013中找不到QtNetwork或QTcpSocket或QTcpSocket等头文件

    一.首先是要有相关的库文件 方法一:手动添加库文件Qt5Networkd.lib 对项目进行右键,找到相关的属性,然后查看Linker中input部分的红色选项中是否含有Qt5Networkd.lib ...

  3. 如何退出Activity?如何安全退出已调用多个Activity的Application?

    如何退出Activity?如何安全退出已调用多个Activity的Application? 退出Activity直接调用finish()方法  //用户点击back键就是退出一个Activity 退出 ...

  4. Rand

    我看了下网上,是这样的:rand()随机产生一个数(0-65535),加上%后,就是对其它数求余,求余产生的数取决于求余的数.比如,rand()%20;意思是利用rand()的返回值(一个0-6553 ...

  5. 解决easyui datagrid加载数据时,checkbox列没有根据checkbox的值来确定是否选中

    背景:   昨天帮朋友做一个easyui datagrid的小实例时,才发现easyui datagrid的checkbox列,没有根据值为true或false来选中checkbox,当时感觉太让人失 ...

  6. IE的有条件注释详解

    IE的有条件注释是一种专有的(因此是非标准的).对常规(X)HTML注释的Miscrosoft扩展.顾名思义,有条件注释使你能够根据条件(比如浏览器版本)显示代码块.尽管是非标准的,但是有条件注释对于 ...

  7. dede去除powered by dedecms

    include/dedesql.classs.php文件中找到第588行: $arrs1 = array(0x63,0x66,0x67,0x5f,0x70,0x6f,0x77,0x65,0x72,0x ...

  8. 【学习笔记】【Foundation】字典

    字典NSDictionary: 用于保存具有映射关系的数据:key-value: 创建NSDictionary的常用方法: dictionary: dictionaryWithContentsOfFi ...

  9. d029: 求出2-100之间的所有质数(素数)

    内容: 求出2-100之间的所有质数(素数) 输入说明: 无 输出说明: 一行一个素数 /* 质数又称素数.指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数(不包括0)整除的数. */ ...

  10. 创建.NET应用程序所经历的步骤

    1.使用某种.NET兼容语言(如C#)编写应用程序.2.把代码编译为(CIL),存储在程序集中.3.在执行代码时(如果这是一个可执行文件,就自动运行,或者在其他代码使用它时运行),首先必须使用JIT( ...