改善python程序的91个建议读书笔记1

  1. 引论

建议1:理解pythonic的概念

pythonic也许可以遮阳定义:充分体现python自身特色的代码风格。

python中两个变量交换只需一行:

a,b= b,a

遍历一个容器时可以为:

for i in alist:
    do_sth_with(i)

打开文件,需要安全的关闭文件可以为:

with open(path,’r’) as f:
     do_sth_with(f)

如果想倒序输出一个列表可以这样:

printlist(reversed(a))

写pythonic程序需要对标准库有充分的理解,特别是内置函数和内置数据类型。比如对于字符串格式化,一般这样写:print‘Hello%s!’%(‘Tom’)。其实%s是非常影响可读性的,因为数量多了之后,就很难分清占位符对应哪一个实参,所以pythonic的代码是这样的。

print‘hello %(name)s!’%(‘name’:’Tom’)

value= {‘great’:’Hello world’,’language’:’python’}

print‘%(greet)s from %(language)s.’%value

print‘{greet} from {language}’.format(greet = ‘Helloworld!’,language = ‘python’)

建议2:编写pythonic代码

(1).要避免劣化代码

1避免只用大小写来区分不同的对象

2避免使用容易引起混淆的名称

3不要害怕过长的变量名

(2).深入认识python有助于编写pythonic代码

1全面掌握python提供给我们的所有特性,包括语言特性和库特性。其中最好的学习方式应该是通读官方手册中的LanguageReference和LibraryReference。

2随之python版本的更新,知识也要更新。

3深入学习业界公认比较pythonic的代码,比如Flask、gevent、requests等。

建议3:理解python与c语言的不同之处

(1).’缩进’与’{}’

python使用严格的代码缩进方式分隔代码块,所以空格和tab键不能随便敲了。

(2).’与 “

C语言中’和”是有严格区别的,在python中,单引号和双引号,仅仅在输入字符串内容的时候,存在微小差异。

(3).三元操作符’?:’

c?x:y在python中等价的形式为xif
c else y

(4).switch…case

python中没有这样的分支语句,但可以使用ifelif… else来替代。

或使用跳转表来实现

def f(x):

     return{

     0:”youtyped zero.\n”,

     1:”youare in top.\n”,

     2:”nis an even number\n”}.get(n,”only single-digit numbers areallowed\n”)

不要呗其他语言的思维和习惯困扰,掌握python的哲学和思维方式才是硬道理。

建议4:在代码中适当添加注释、

python中有3种形式的代码注释:块注释、行注释以及文档注释。这三种形式的惯用法大概有如下几种:

(1).使用块注释仅仅注释那些复杂的操作、算法,还有可能别人难以理解的技巧或者不够一目了然的代码。

(2).注释和代码隔开一定的距离,同时在块注释之后最好多留几行空白在写代码。

(3).给外部可访问的函数和方法添加文档注释。注释要清楚描述方法的功能,并对参数、返回值以及可能发生的异常进行说明,使得外部调用它的人员仅看docstring就能正常使用。

(4).推荐在文件头中包含copyright申明、模块描述等,如有必要可考虑加入作者信息以及变更记录。

建议5:通过适当添加空行使代码布局更加优雅

在一个团队中,保持良好的代码格式需要团队成员在选取一套合适的代码格式规则的基础上遵从和应用。往往代码不断修改,所有可读性直接关系到可维护性和可扩展性。

(1).在一组代码表达完一个完整思路之后,应该用空白行进行间隔。

(2).尽量保持上下文语义的易理解性,如当一个函数调用另一个函数的时候,尽量将他们放在一起,最好调用者在上,被调用者在下。

(3).避免过长的代码行,每行最好不要超过80个字符。超过的部分可以用括号进行行连接,并保持元素垂直对齐。

(4).不要为了保持水平对齐而使用多余的空格,使阅读者更容易理解代码更重要。

(5).空格的使用要能够在需要强调的时候警示读者,二元运算符左右两边应该有空格,逗号和分号前不要使用空格,函数名和左括号之间、序列索引操作时序列名和[]之间不需要空格,函数默认的参数两端不需要空格,强调前面的操作符时使用空格。

建议6:编写函数的四个原则

函数能够带来最大化的代码重用和最小化的代码冗余。一般函数设计有以下基本规则可以参考:

原则1函数设计要尽量短小,嵌套层次不宜过深。所谓短小,就是前面所提到的一样尽量避免过长函数。

原则2函数申明应该做到合理、简单、易于使用。除了函数名能反映其大体功能外,参数个数同样不宜过多。

原则3函数参数设计应该考虑向下兼容。有时候随着需求和版本的升级,需要进行一定的修改才能满足这个版本的需求,设计过程中除了着眼当前的需求还得考虑向下兼容

原则4一个函数只做一件事,尽量保持函数语句粒度的一致性。

建议7:将常量集中到一个文件

实际上python的内建命名空间是支持一小部分常量的,如我们熟悉的True、False、None等,如何使用常量呢?一般来说有两种方式。

(1).通过命名风格来提醒使用者该变量代表的意义为常量,如常量名所有字母大写,用下划线连接各个单词,如MAX_OVERFLOW、TOTAL。这是一种约定俗成的风格。

(2).通过自定义的类实现常量功能。这要求符合“命名全部为大写”和“值一旦绑定便不可再修改”这两个条件。下面是一种常见的解决方法,它通过对常量对应的值进行修改时或者命名不符合规范时抛出异常来满足以上常量的两个条件。

#const.py

class_const:

     classConstError(typeError):  pass

     classConstCaseError(ConstError):  pass

def  __setattr__(self,name,value):

       if self.__dict__.has_key(name):

       raise self.ConstError,”Can’t change const %s”%name

       if not name.isupper():

       raise self.ConsrCaseError,’const name “%s” is not all uppercase’%name

       self.__dict__[name]= value

import  sys

sys.modules[__name__]= _const()

使用时直接import  const即可

import  const

const.COMPANY= “IBM”

无论采用哪一种方式实现常量,都提倡将常量集中到一个文件中,因为这样有利于维护,一旦需要修改常量的值,可以集中统一进行而不是逐个文件去检查。

时间: 2024-10-13 05:11:03

改善python程序的91个建议读书笔记1的相关文章

改善python程序的91个建议读书笔记2

第二章 编程惯用法 建议8:利用assert语句来发现问题 断言在很多语言中都存在,它主要为调试程序服务,能够快速方便的检查程序的异常或者发现不恰当的输入等. assert语法如下 assert expression1 ["," expression] 其中计算expression1的值会返回True或者False,当值为False的时候会引发AssertionError,而expression2是可选的,常用来传递具体的异常信息.实际在执行过程中调用了if __debug__ and

《编写高质量代码:改善Python程序的91个建议》读后感

编写高质量代码:改善Python程序的91个建议  http://book.douban.com/subject/25910544/ 1.(建议16)is 用于判断两个对象的id是否相等,==才是判断值是否相等 2.(建议23)for,while,和try语句后面都可以跟else语句,可以简化代码 3.(建议18) __init__.py模块可以写代码,import时只需要 import 包(文件夹) 4.(建议19)用import a 而不是 from a import b ,可以避免嵌套导入

《编写高质量代码 改善python程序的91个建议》第二章 惯用法 8-18

建议8:调试语句assert expression, "sentence", python -O xx.py 可以禁用断言,建议少用断言: 建议9:数据交换不推荐使用中间值 语句执行时间: from timeit import Timer Timer('x,y = y,x').timeit() ## x,y = y,x 相当于元组(x,y)= (y,x) 涉及packing和unpacking def swap() x = 2 y = 3 x,y = y,x import disdis

《编写高质量代码 改善python程序的91个建议》第二章 基础语法 19-35

建议19:有节制使用from...import... import    VS  from...import.... import  test                  ##  test 进入局部命令空间 + 进入系统模块字典中 sys.module['test']: from test  import  a      ##  a 进入局部命令空间  + test进入系统模块字典中(a 不在系统模块字典中): ## test_import.py from a import add fro

编写高质量代码 改善Python程序的91个建议PDF版

链接:https://pan.baidu.com/s/1iGakOIFUaOW9q8ZI7_0QXw 原文地址:http://blog.51cto.com/13929572/2174547

编写高质量Python程序的91个建议(转)

建议1:理解Pythonic概念 Pythonic可以定义为:充分体现Python自身特色的代码风格. 推荐阅读:PEP 8 – Style Guide for Python Code 建议2:编写Pythonic代码 避免只用大小写来区分不同的对象. 避免使用容易引起混淆的名称如字母'O'的大小写和字母'L'的小写'l'. 不要害怕过长的变量名,变量名易于理解最重要. 建议3:理解Python与C语言的不同之处 "缩进"与"{ }" C.C++.Java等语言使用

编写高质量代码:改善Java程序的151个建议-学习笔记

java中通用的方法和准则 1.不要让常量和变量中出现易混淆的字母 比如: long i = 1l; 别人很难一下子看清楚是11还是1l,所以应该这样写1L. 命名规范: 1.包名全部小写 2.类名首字母大写 3.方法名称,首字母小写,后面单词首字母大写 4.常量要用大写,并且用下划线隔开 5.变量要用小写 2.莫让常量蜕变成变量 interface Const { public static final int RANDOM_NUM = new Random().nextInt(10); }

《编写高质量代码:改善Java程序的151个建议》笔记

To fight the unthinkable,you have to be willing to do the unthinkable. 不要在循环中使用try catch,应该放在循环的外面. One Line 务必让常量的值在运行期间保持不变. 保证三元操作符中的两个操作类型一致. 反序列化时构造方法不会执行. 在序列化类中,不使用构造方法为final变量赋值. 避免为final变量复杂赋值. 发布应用系统时,禁止使用类文件替换方式,整体WAR包发布才是万全之策. 包装类型参与运算时,要

编写高质量代码–改善python程序的建议(二)

原文发表在我的博客主页,转载请注明出处! 建议七:利用assert语句来发现问题断言(assert)在很多语言中都存在,它主要为调试程序服务,能够快速方便地检查程序的异常或者发现不恰当的输入等,可防止意想不到的情况出现.其语法如下: assert expression1 ["," expression2] 其中expression1的值会返回True或者False,当值为False的时候会引发AssertionError,而expression2是可选的,常用来传递具体的异常信息. 不