【笔记】《程序设计导论Python语言实践》

2017年10月6日
终于算完了,趁着十一草草看完,性价比不高不低吧,有些困惑的问题得到了解决所以还是很值得的,尤其是可变变量那块。数据结构和算法一章最为粗糙,计划换本专门的书看。


【笔记】《程序设计导论Python语言实践》_第1张图片

记录一些程序设计/Python中的新知识或比较重要的理念

目录

  • 基本元素
  • 函数和模块
  • 面向对象的程序设计
  • 算法和数据结构

第一章 程序设计的基本原色

1.控制台中运行Python文件

运行无输入的Python文件
sys.argv[1]作输入
input作输入

2.Python程序开发流程

【笔记】《程序设计导论Python语言实践》_第2张图片
Python程序开发流程

3.使用分号(;)可以在一行书写多条语句,不建议使用
4.SyntaxError:编译错误
5.数据类型:一种数据类型是一系列值以及为这些值定义的一系列操作方法的集合
6.字面量(Literal)_数据类型的值;标识符(Identifier)大小写敏感;常量(Constant variable)约定全大写
7.Python中所有的数据都表示为对象及对象之间关系
8.+号连接字符串进行字符串拼接
9.数据类型显示变换:str(),int(),float()
10.Python赋值过程中的绑定关系!!!【后边的列表更为明显】

【笔记】《程序设计导论Python语言实践》_第3张图片
Paste_Image.png

11.Python语言中,int的取值范围可以为任意大
12.优先级:算数>比较>布尔;not>and>or
13.math.log()默认底数为自然常数e
14.Python内部采用Unicode编码存储
15.Python用三个引号表示多行字符串
16.Python的余数和被除数同号,实现b*(a//b)+a%b==a

【笔记】《程序设计导论Python语言实践》_第4张图片
负数除/余

17.应当避免比较两个浮点数的相等性
18.round()函数做四舍五入。实际上是四舍六入五成双
19.id(a);type(a);repr(a);分别取地址、类型和值
20.Python支持任意长度的链式比较运算、任意长度的链式赋值语句
21.Python语言中,语句块取决于缩进的空白字符的个数,通常采用4个空格缩进
22.i+=1 √
23.应用实例:①调和数计算;②牛顿法求平方根;③数制转换;④蒙特卡洛模拟;⑤整数的因子分解;
24.多行书写:括号内直接换行;无括号行位加反斜杠

【笔记】《程序设计导论Python语言实践》_第5张图片
多行书写

25.Python支持break,continue,pass;不支持switch,goto;【path用于限制是否“通过”继续执行】
26.while可以实现任何循环,for语句只能实现固定计数的循环
27.数据结构:是一种用于计算机程序处理的数据组织方式
28.“差一错误”(off-by one error),表示因数组索引从0开始而引起的超出索引错误
29.别名:当两个变量指向同一个对象时,则互为“别名”
简单说即——x、y引用同一个数组,x修改数组,则y也会改变

【笔记】《程序设计导论Python语言实践》_第6张图片
别名

30.数组的复制操作——数组切片。y=x[:],简洁,开销大
31.数组的4个核心操作:创建数组、索引访问、索引赋值、迭代遍历
32.厄拉多塞素数筛选法(Sieve of Eratosthenes),P118
33.数组的负数下标,a[-i]=a[len(a)-i]
34.a[i:j]=a[i,j),左闭右开
35.随机冲浪模型(randome surfer model),P187,页面排名(the page's rank),马尔科夫链(Markov chain)
36.补:条件/循环等程序块的缩写,可以直接追加到冒号同行后面

【笔记】《程序设计导论Python语言实践》_第7张图片

第二章 函数和模块

1.在计算任务中,任何时候只要可以清晰地分离任务,则建议使用函数分离任务
2.函数定义

【笔记】《程序设计导论Python语言实践》_第8张图片
函数定义

3.函数定义位置必须位于调用该函数的全局代码之前。∴Python程序结构依次为①import;②函数;③全局
4.函数的副作用,指函数内产生的输入、输出、改变系统状态情况;应尽量避免
5.多态性polymorphism,同名不同参
6.不可变数据类型:int float str bool,对于不可变对象的修改,看似改了值,实际上创建了新的对象

【笔记】《程序设计导论Python语言实践》_第9张图片
整数的不可变性

7.函数的形参、实参互为别名
8.一个以数组为参数,对数组进行修改的函数,其修改的是数组本身而不是副本

【笔记】《程序设计导论Python语言实践》_第10张图片
数组为参数

9.Python语言不支持函数重载的编程语言,通常使用默认参数来实现
10.Python在函数定义时对默认参数只求值一次,并不是每次调用都求一次

【笔记】《程序设计导论Python语言实践》_第11张图片
默认参数

11.Python程序可以看做是一系列文件,每个文件是一个独立的模块,每个模块包含若干函数
12.模块module:模块包含可被其他程序调用的函数;客户端client:客户端是调用其他模块中的函数的程序
13.Python语言的传统是把测试代码放在名为main()的函数中

【笔记】《程序设计导论Python语言实践》_第12张图片
Python模块测试

14.Python的import语句会执行导入模块中的所有全局代码(包括函数定义),所以模块中不能遗留全局代码,采用main()的方法进行测试,即“单元测试”
15.模块设计的指导性原则:为客户端提供需要的函数,不要包含其他多余的内容
16.按照惯例,使用下划线开始的函数名作为私有函数,表示不应直接调用这个函数(实际可以做到)
17.随机过程的迭代案例:①谢尔宾斯基三角形(Sierpinski triangle);②巴恩斯利蕨(Barnsley fern);
18.第一次导入模块时,Python编译代码并把结果保存到.pyc文件中,再次调用无需重新编译
19.递归案例:①欧几里得法求最大公约数;②汉诺塔问题;③格雷码;④递归图形H-树;⑤布朗桥
20.使用递归代码创建的数组会占用大量内存

第三章 面向对象的程序设计

1.在一个计算中,当数据和相关的计算任务可以清楚地分开时,则必须分开
2.定义新的数据类型并处理包含数据类型值得对象的能力成为数据抽象(data abstraction)
3.函数与方法类似,函数调用通常使用一个模块名,而方法调用使用变量名

【笔记】《程序设计导论Python语言实践》_第13张图片
函数与方法

4.一个对象具有三个标准属性:标识、类型、值(状态)
标识(identity):其在计算机内存中的存储位置,唯一标示该对象
类型(type):对象类型
值(value):对象当前表示的数据类型的值

【笔记】《程序设计导论Python语言实践》_第14张图片
对象标准属性

5.按惯例,内置数据类型以小写字母开始,而用户自定义数据类型以大写字母开始
6.没有任何引用指向的对象,成为孤立对象(Orphaned object),系统会自动重用其占据的内存

【笔记】《程序设计导论Python语言实践》_第15张图片
孤立对象

7.其他程序员手动操作内存管理时,忘记释放孤立对象所占据内存空间的错误成为内存泄漏(Memory leak)
8.不允许在类/数据类型中定义两个同名的方法,重载使用默认参数
9.API,应用程序编程接口是所有客户端之间的契约。

【笔记】《程序设计导论Python语言实践》_第16张图片
API

10.使用类来实现一个数据类型,三个部分:一个构造函数、若干实例变量、若干方法
构造函数init(),方法potentialAt(),内置函数str(),测试函数main()

【笔记】《程序设计导论Python语言实践》_第17张图片
类示例

11.可使用init()作为构造函数,只能在其中定义和初始化实例变量,返回指向新对象的一个引用,self参数指向新建对象

【笔记】《程序设计导论Python语言实践》_第18张图片
构造函数
【笔记】《程序设计导论Python语言实践》_第19张图片
创建/初始化对象过程

12.方法中的变量包括——实例变量、参数变量、局部变量

【笔记】《程序设计导论Python语言实践》_第20张图片
方法

13.海龟绘图(Turtle graphic)递归图形:科赫曲线(Koch curve)、等角螺旋(Spira mirabilis)、布朗运动(Brownian motion)、曼德布洛特集合(Mandelbrot set)
14.将客户端和实现分离开从而隐藏信息的过程称为“封装”——使用一个数据类型无需理解其具体实现——使用一个程序替代另一个程序而无需修改客户端代码
15.未使用封装引起的问题案例:Y2K问题、邮政编码问题、IPv4和IPv6
16.初始化对象的参数为一个可变对象时(如数组),应在初始化时进行拷贝(如self._c=a[:]),否则客户端能绕过对象修改数组
17.Python的内置数据类型元组tuple,创建之后其元素不可被修改,可以使用元组组包、元组解包
18.OOP,①封装:黑盒;②多态:单接口、多方法;③继承:获取另一个对象的属性的过程
19.特殊方法,以内置函数为例,当客户端调用str(x)时,会先看x对象有没有str()方法,并调用之

【笔记】《程序设计导论Python语言实践》_第21张图片
算术运算符
【笔记】《程序设计导论Python语言实践》_第22张图片
等性运算符
【笔记】《程序设计导论Python语言实践》_第23张图片
比较运算符
【笔记】《程序设计导论Python语言实践》_第24张图片
内置函数

20.引用相等:is/is not ,表示引用地址相等;对象相等:==/!=,表示值相等,如果有eq()方法的话

【笔记】《程序设计导论Python语言实践》_第25张图片
等性对比

21.Python中一切皆对象,函数也是,函数可作为函数的参数和返回值
22.异常时程序运行时发生的破坏性事件,通常表示一种错误。

【笔记】《程序设计导论Python语言实践》_第26张图片
抛出异常

23.断言时在程序某个位置确定应该为True时的一个布尔表达式,通常用于调试,默认开启,可关。

【笔记】《程序设计导论Python语言实践》_第27张图片
抛出断言

第四章 算法和数据结构

1.增长量级

【笔记】《程序设计导论Python语言实践》_第28张图片
增长量级

2.Python可变数组的扩容机制——以倍增和减半策略保证可变数组的25%~100%的使用量

【笔记】《程序设计导论Python语言实践》_第29张图片
Python可变数组

3.摊销分析,对常量型操作的总成本除以操作次数得到一个常量,是为摊销分析
4.Python字符串和数组相似,区别在于——字符串是不可变对象

【笔记】《程序设计导论Python语言实践》_第30张图片
字符串和字符串数组

5.Python灵活,带内存消耗大,最重要的功能特征之一就是内存分配系统,设计目标是减轻管理内存的繁重工作
6.缓存,Python为一个值仅创建一个对象拷贝,包括True、False、[-5,256]
7.调用一个函数时,系统从栈(stack)中分配函数所需内存,用于函数的局部变量;创建一个对象时,系统从堆(heap)中分配内存。
8.每个用户自定义类型的对象可能消耗大量的内存。

你可能感兴趣的:(【笔记】《程序设计导论Python语言实践》)