解决以下问题:
(1)怎么能写出结构良好,可读的程序,使你和其他人能够很容易地冲用它
(2)基本结构块,如循环,函数及赋值,是如何执行的?
(3)Python编程的陷进有哪些,你将如何避免它们?
一,回到基础
#赋值
链表的赋值,实际上是一个对象的引用,要了解这里发生了什么,需要知道链表是如何存储在计算机内存的
foo = ['Monty', 'Python']
bar = foo
foo[1] = 'Bodkin'
bar
['Monty', 'Bodkin']
#等式
python提供了两种方法来检查一对项目是否相同
is操作和==
#条件语句
if...elif
all()函数和any()函数可以应用到一个链表(或其他序列),以检查是否全部或任一项目满足一些条件
sent = ['No','good','fish','goes','anywhere','without','a','porpoise','.']
all(len(w) > 4 for w in sent)
False
any(len(w) > 4 for w in sent)
True
二 序列
三 风格的问题
四 函数:结构化编程的基础
#函数的输入和输出
return语句将其结果返回给调用它的程序
#参数传递
与赋值一样,结构化对象的值是该对象的引用
#变量的作用域
名称解析的LGB规则:本地(local),全局(global),然后内置(built-in)
#参数类型检查
python不会强迫我们声明变量的类型
但可以使用if not type(p) is str来简单检测,或者使用assert
#功能厅分解
#文档说明函数
@param 等docstring处理工具
五 更多关于函数
#作为参数的函数
可以使用lambda表达式
#累计函数
yield函数
#高阶函数
#参数的命名
关键字参数
参数的默认值
参数可以按任意顺序指定,也可以省略
六 程序开发
#Python模块的结构
单独的.py文件,有些定义"类"
#多模块程序
import语句
#误差源头
调bugs
#调试技术
如果程序产生一个"异常"的运行错误,解释器会输出堆栈跟踪
#防御性编程
添加assert语句
七 算法设计
#递归
#空间与时间的权衡
#动态规划
八 Python库的样例
#Matplotlib绘图工具
#NetworkX包定义和操作由节点和边组成的结构(称为图)
#CSV
#Numpy数值运算包
#其他包