think python 读书笔记

216 阅读3分钟

死亡代码

在返回语句后面代码执行流程里其他位置都无法再触碰了,这种代码叫做死亡代码。 我:在编辑器里面,死亡代码部分会给出提示,表示这一块永远不会被执行到。

增量式开发

在面对一些复杂函数的时候,你会发现需要花很长时间调试。 要应对越来越复杂的程序,不妨试试增量式开发的办法。增量开发的目的是避免 长时间的调试过程,一点点对已有的小规模的代码进行增补和测试。 假如说,我们想要计算两点之间的距离, 我们输入的是两点之间的坐标,在平面上就是 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