常说,见字如见人。那么程序员也同样如此,第一反应程序员的就是他的代码是否美观。毕竟代码不仅是要实现东西,更重要的是给领导看的,如果代码一踏糊涂,就是技术在过硬也就那样,作为领导者会认为你工作不严谨。就比如一笔好字,给人感觉是完全不同的,在面试的时候也是非常重要的,代码写的规范美观,HR会在无形之中给你加分的!

第 5 条:了解切割序列的方法

1.不要写多余的代码:当 start 索引为 0,或 end 索引为序列长度时,应该将其省略。

  1. 切片操作不会计较 start 与 end 索引是否越界(如 a[:20] 或 a[-20:])。

3.对 list 赋值的时候,如果使用切片操作,就会把原列表中处在相关范围内的值替

换成新值,即便它们的长度不同也依然可以替换

第 8 条:不要使用两个以上的表达式的列表推导

列表推导支持多级循环,每一级循环也支持多项条件。超过两个表达式的列表推导是很难理解的,应该尽量避免。

可以使用两个条件、两个循环或

一个条件搭配一个循环。如果要写的代码比这还复杂,那就应该使用普通的 if 和 for 语句,并编写辅助函数。

第 9 条:用生成器表达式来改写数据量较大的列表推导

当输入的数据量较大时,列表推导可能会因为占用太多内存而出问题。为了解决这个问题,Python 提供了生成器表达式(generator expression),它是对列表

推导和生成器的一种泛化(generalization)。

把实现列表推导所用的那种写法放在一对圆括号中,就构成了生成器表达式。此时立刻返回一个迭代器,逐次调用内置的 next 函数,以这个迭代器为参数,输出一个值,做循环输出即可。

3.11

第 11 条:用 zip 函数同时遍历两个迭代器

  1. 内置的 zip 函数里可以平行的同时遍历两个迭代器,如果长度不一样则会以较短的迭代器为准而结束循环。

  2. python 3 中的 zip 函数相当于生成器,可以逐次产生元组。

  3. python 2 则时一次性生成返回整份列表;如果用 zip 函数遍历的数据比较多,则会导致程序崩溃,需要用itertools内置模块的 izip 函数

第 12 条:不要在 for 和 while 循环后面写 else 模块

结果:

第 2 章 函数

第 14 条:尽量用异常来表示特殊情况,而不要返回 None

第 17 条:在参数上面迭代时,要多加小心

迭代器只能欸遍历一次,如果多次遍历则会出现意想不到的错误。

  1. 为解决迭代器不可多次遍历,可以使用迭代器制作一份列表,缺点在于列表的数据量大的话,会造成程序崩溃;

  2. ① 可以使用 lambda 表达式代替,该表达式在调用生成器的时候,可以每次产生新的迭代器;(略显生硬)

    ② 新编一种实现迭代器协议的容器类。(建议使用)

第 20 条:用 None 和文档字符串来描述具有动态默认值的参数

如果参数的实际默认值是可变类型(mutable),那就一定要记得用 None 作为形式

上的默认值。(即形参值设为 None)

第 22 条:尽量用辅助类来维护程序的状态,而不要用字典和元组

  1. 我们很容易就能用 Python 内置的字典与元组类型构建出分层的数据结构,从而保存程序的内部状态。

    但是,当前套多于一层的时候,就应该避免使用这种做法了(例如,不要使用包含字典的字典,不要使用过长的元组)

  2. 如果容器中包含简单而又不可变的数据,可以使用namedtuple来表示

  3. 保存内部状态的字典如果变得比较复杂,那就应该把这些代码拆解为多个辅助类。(建议使用)

第 25 条:用 super 初始化父类

  1. 直接在子类中调用超类的init方法,可能会产生无法预知的行为,问题之一就是一个类继承多个类,全部调用超类的init方法,实际调用顺序并不固定。

  2. 钻石行继承体系:如果子类继承自两个单独的超类,而那两个超类有继承自同一个公共基类,那么就构成了钻石行继承体系。

3.总是应该使用内置的 super 函数来初始化父类。

谢谢阅读!你有从中学到东西嘛?

此新闻由一点资讯提供