第1章 引论
-
建议1:理解Pythonic概念
①定义:其实这是一个比较抽象的概念,但是大致可以定义为:充分体现python自身特色的代码风格
②代码风格:
比如两个变量的交换,C代码:
int a = 1,b = 2; int tmp = a; a = b; b = tmp;
体现pythonic的python代码:
a, b = b, a
我们应该充分利用好pyhon简洁的语法,而不是过分使用各种奇淫技巧,也就是我们常说的代码可读性。
③python的标准库:python之所以比其他语言更为简洁,我认为可能就是因为它拥有大量完整的库来供我们使用,善用好这些库对编写pythonic代码有极大的帮助
-
建议2:编写Pythonic代码
①命名:命名不要有歧义,不要害怕过长的命名
②遵守PEP8规范
-
建议3:理解Python与C语言的不同之处
①缩进与{}:C,java使用{}分隔代码块,python使用缩进来分隔代码块,因此缩进在python中需要尤为注意,它可能会给程序带来意想不到的风险
②'' 与 “”,在C和Java中,单引号代表char类型,双引号代表String类型,但在python中没有明显的区别,但是在实际项目中,我们也应该保持代码风格的统一,不要单双引号混用。
③三元操作符:c和java:C?A:B,当满足C条件执行A,不满足执行B,python:A if C else B
-
建议4:在代码中适当添加注释
python种三种注释:块注释:行注释以及文档注释
注释意义:帮助自己或他人更好的理解代码
注意注释位置以及是否必要
-
建议5:通过适当添加空行使代码布局更为优雅、合理
①在一段代码表达完一个完整的思路之后,可添加空白行
②避免代码行过长
③注意上小文的易理解性:被调用的一般放在调用者的下方
④逗号和分号之前不要有空格,运算符前后推荐空格
-
建议6:编写函数的4个原则
①嵌套不宜过深
②函数申明简洁明了,参数不应过多,参数太多对调用者来说需要花费更多精力去理解每个参数的意义。
③函数参数设计考虑向下兼容。
④函数职能单一:一个函数只做一件事情。
-
建议7:将常量集中到一个文件
①python中用户可定义的都是变量,只有python内建命名空间存在一部分常量:如True,False,None等。
②定义在一个文件的好处是易于维护,一般项目中defines文件干的就是这个事。
第2章 编程惯用法
-
建议8:利用assert语句来发现问题
例如1==2返回False时,就会引发AssertionError,后面的表达式常用来传递具体的异常信息
assert 1==2,"not equals"
-
建议9:数据交换值的时候不推荐使用中间变量
使用 x, y = y, x 比 tmp = x, x = y, y = tmp 会具有更好的性能
-
建议10:充分利用Lazy evaluation的特性
Lazy evaluation常被译为“延迟计算”或“惰性计算”,指的是在真正需要执行的时候才去计算表示式的值。
①避免不必要的计算,带来性能上的提升:在python条件表达式中,if x and y,当x返回False时,不会再计算y,if x or y,当X为True时不会再计算y,在实际编程中我们可以利用好这一特性。
②节省空间,使得无限循环的数据结构成为可能:python中的生成器,使用yield语句返回一个迭代中的返回值,并记录返回的位置,在下一次迭代时,从该位置处开始执行,因此它只需要在每一次计算的时候才返回需要的元素。
-
建议11:理解枚举替代实现的缺陷
-
建议12:不推荐使用type来进行类型检查
基于内建类型拓展的用户自定义类型,type函数不能准确返回结果,可使用isinstance函数来替代
-
建议13:尽量转换为浮点类型后再做除法
因为python中没有类型说明,因此当两个int型相除时也会返回一个int型(他并不知道你需要返回一个float),因此比如3/2在python2中/表示向下取整得到1,因此为了得到较为准确的结果需要将操作数转换为浮点数再做运算,pytho