死亡代码
在返回语句后面代码执行流程里其他位置都无法再触碰了,这种代码叫做死亡代码。 我:在编辑器里面,死亡代码部分会给出提示,表示这一块永远不会被执行到。
增量式开发
在面对一些复杂函数的时候,你会发现需要花很长时间调试。 要应对越来越复杂的程序,不妨试试增量式开发的办法。增量开发的目的是避免 长时间的调试过程,一点点对已有的小规模的代码进行增补和测试。 假如说,我们想要计算两点之间的距离, 我们输入的是两点之间的坐标,在平面上就是 4 个数字,返回的是 2 点之间的距离,就是一个浮点数。 我们第一步写出的函数可能是这样:
def distance(x1, x2, y1, y2):
return 0.0
在这个版本,无论我们输入输入什么都会输出 0.0,但是这个函数在语法上正确,并且可以运行,这样**在程序过于复杂的情况之前就能及时测试了 **
...
另外,我们在程序中写的 print 语句是用来调试的,一旦程序能正常工作了,就应该把 print 语句去掉。这些 print 语句也叫做脚手架代码,因为是用来构建程序的,但不会被存放在最终版本的代码中。
增量式开发的核心如下:
信仰之悦
跟随者运行流程是阅读程序的一种方法,但是很快容易糊涂。另外一种方法,我称之为思维跳跃。当你遇到一个函数调用的时候,你不用去追踪具体的执行流程,而是假设这个函数工作正常且返回正确的结果。
测试
程序测试可以用来表明 bug 存在,但永远不能表明 bug 不存在。
列表中重要的三种运算
map、filter 和 reduce是列表中重要的三种运算,常用的列表运算都可以表示为 这三种的组合。
把列表中的所有元素加起来是一种很常用的运算,所以 python 提供了内置的函数 sum
把一系列的列表元素组合成一个单值的运算,也叫 reduce (这个单词是缩减的意思)
在列表中删除元素
pop
del
del 和切片索引结合删除更多元素:
递归与备忘
字符串模块
whitespace 包含了空格、制表符、另起一行等。 punctuation 模块包含了各种标点符号的字符。
递归输出某个文件夹下全部文件的名字
关于 shell 和 python 之间的管道
在 shell 中启动的程序 也都可以在 python 中启动,这要用到一个 pipe 对象。 直接翻译为管道的对象可以理解为 python 到操作系统的 shell 进行通信的途径。 一个 pipe 对象就代表了一个运行的程序 示例:
import os
cmd = "ls -l"
# 返回的结果是一个对象用起来就像一个打开的对象一样
fp = os.popen(cmd)
# 使用 readline 每次读取一行
# 使用 read 全部读取
print(fp.read())
stat = fp.close()
# 返回值是 ls -l 进程的最终状态 None意思是正常退出 没有错误
print(stat)
在 python 中计算两个文件是否有相同的内容
md5sum 计算 checksum 校验值
md5sum demo.txt