step

pythonic

Pythonic

  1. 什么是 Pythonic ? 能体现 python 特点的代码。
  2. str.format()也成了Python最为推荐的字符串格式化方法,当然也是最Pythonic的。
  3. 包和模块的命名采用小写、单数形式,而且短小。
  4. 避免只用大小写来区分不同的对象。
  5. 避免使用容易引起混淆的名称。
  6. 不要害怕过长的变量名。长的命名更容易理解阅读。
  7. python 和 C 等其他语言的不同

    1. python 使用严格的空格来分割代码,其他大部分语言用花括号 {} 来分割。
    2. C 语言中单引号和双引号有严格的区别,前者代表单个字符,后者代表字符串并且以 \0 结尾,但在 python 中二者没有明显区别。仅仅是使用上存在微小差异。
    3. 三元操作符 ?: c ? x : y 在 python 中用 x if c else y 表示。
    4. python 中没有 switch case 语句,但是用 if else 或者函数也可以很容易实现。
  8. python 中有三种注释:块注释,行注释,文档注释。

    1. 块注释或行注释用于注释复杂的操作,算法,以及别人难以理解的部分。
    2. 注释和代码之间注意用空格分隔,便于阅读。
    3. 添加函数或方法的文档注释,注释要清楚的描述方法的功能。
    4. 文件头部包含声明, copyright,模块描述,作者信息等。
  9. 函数能够带来最大化的代码重用和最小化的代码冗余。

    1. 原则1 函数设计要尽量短小,嵌套层次不宜过深。
    2. 函数申明应该做到合理、简单、易于使用。除了函数名能够正确反映其大体功能外,参数的设计也应该简洁明了,参数个数不宜太多。参数太多带来的弊端是:调用者需要花费更多的时间去理解每个参数的意思,测试人员需要花费更多的精力来设计测试用例,以确保参数的组合能够有合理的输出,这使覆盖测试的难度大大增加。因此函数参数设计最好经过深思熟虑。
    3. 函数参数设计应该考虑向下兼容。也就是尽量避免影响到之前的代码。
    4. 原则4 一个函数只做一件事,尽量保证函数语句粒度的一致性。
  10. 将常量集中到一个文件

    1. 通过命名风格来提醒使用者该变量代表的意义为常量,如常量名所有字母大写,用下划线连接各个单词,如MAX_OVERFLOW、TOTAL。
    2. 无论采用哪一种方式来实现常量,都提倡将常量集中到一个文件中,因为这样有利于维护,一旦需要修改常量的值,可以集中统一进行而不是逐个文件去检查。采用第二种方式实现的常量可以这么做:将存放常量的文件命名为constant.py,并在其中定义一系列常量。
  11. 利用assert语句来发现问题

    1. 断言(assert)在很多语言中都存在,它主要为调试程序服务,能够快速方便地检查程序的异常或者发现不恰当的输入等,可防止意想不到的情况出现。
    2. 不要滥用断言。
  12. 数据交换值的时候不推荐使用中间变量 x, y =y, x
  13. 充分利用Lazy evaluation的特性
  14. 尽量转换为浮点类型后再做除法

    1. 当除法运算中两个操作数都为整数的时候,其返回值也为整数,运算结果将直接截断,从而在实际应用中造成潜在的质的误差。
    2. 当涉及除法运算的时候尽量先将操作数转换为浮点类型再做运算。
  15. 如果使用对象不是信任源,应该尽量避免使用eval,在需要使用eval的地方可用安全性更好的ast.literal_eval替代。
  16. 使用enumerate()获取序列迭代的索引和值
  17. 分清==与is的适用场景

    1. is的作用是用来检查对象的标示符是否一致的,也就是比较两个对象在内存中是否拥有同一块内存空间,它并不适合用来判断两个字符串是否相等。
    2. 而==才是用来检验两个对象的值是否相等的,它实际调用内部eq()方法,因此a == b相当于a.eq(b),所以==操作符是可以被重载的,而is不能被重载。
    3. 一般情况下,如果x is y为True的话x == y的值也为True(特殊情况除外,如NaN,a =float(‘NaN’);a is a 为True,a==a为false),反之则不然。
    4. 判断两个对象相等应该使用 == 而不是 is 。
  18. 考虑兼容性,尽可能使用Unicode

    1. Python内建的字符串有两种类型:str和Unicode,它们拥有共同的祖先basestring。
  19. Python提供了3种方式来引入外部模块:import语句、from…import…及import函数。其中较为常见的为前面两种,而import函数与import语句类似,不同点在于前者显式地将模块的名称作为字符串传递并赋值给命名空间的变量。

    1. ·有节制地使用from a import B形式,可以直接访问B。·尽量避免使用from a import *,因为这会污染命名空间,并且无法清晰地表示导入了哪些对象。
  20. python i+=1 不等于 ++i ,但是 ++i 合法,等价于 +(+i)
  21. 异常中代码不易过多。
  22. 连接字符串应优先使用join而不是+ ,区别是前者会一次性申请总共所需内存,后者会拼接一次申请一次。
  23. 格式化字符串时尽量使用.format方式而不是%
  24. 记住函数传参既不是传值也不是传引用
Tagged with python

Posted July 11, 2020


WIJE picweijiew . github