1. lint对你的代码运行pylint。pylint是一个在python源代码中查找bug的工具,对于c和c++这样的不那么动态的语言,这些bug通常由编译器来捕获。由于python的动态特性,有些警告可能不对,不过伪告警应该很少。优点: 可以捕获容易忽视的错误,例如输入错误,使用未赋值的变量等缺点: pylint不完美,要利用其优势,我们有时候需要 a)围绕着它来写代码 b) 抑制其告警 c)改进它 d)忽略它

2. 导入仅对包和模块使用导入使用 import x 来导入包和模块使用 from x import y,其中x是包前缀,y是不带前缀的模块名使用 from x import y as z,如果连个要导入的模块都叫做y或者y太长了

3. 包使用模块的全路径名来导入每个模块优点:避免模块名冲突,查找包更容易缺点:部署代码变难,因为你必须复制包层次结论:所有的新代码都应该用完整包名来导入每个模块,即如下:

#reference in code with complete name

import sound.effects.echo

#reference in code with just module name(preferred)

from sound.effects import echo #这样就可以在程序中使用echo,而非 sound.effects.echo 全名来访问模块echo

使用模块的全路径名,比如

import sound.effects.echo

而非相对路径,比如

import sound

import sound.effect

import echo

4. 异常异常必须遵守特定的条件:(1)触发异常方式raise MyException('Error message')或者raise MyException, "Error message"而不要使用过时的字符串异常raise "Error message"(2)模块或包应该定义自己的特定于的异常基类,这个基类应该从内建的Exception类继承,模块的异常基类应该叫做Error.

class Error(Exception):

pass

(3)永远不要使用except:语句来捕获所有异常,也不要捕获 Exception 或者 StandardError,除非你打算重新触发该异常,或者你已经在当前线程的最外层(记得还是要打印一条错误消息)(4)尽量减少 try/except块中的代码量,try块的体积越大,期望之外的异常就越容易被触发。这种情况下,try/except块将隐藏真正的错误。(5)使用finally自居来执行那些无论try块中有没有异常都应该被执行的代码,例如关闭文件(6)当捕获异常时,使用as而不要用逗号,例如

try:

raise Error

except Error as e:

pass

5. 全局变量避免使用全局变量,全局变量是定义在模块级别的变量,导入模块时可能改变模块行为,因为导入模块时会对模块级变量赋值。避免使用模块变量,使用类变量来代替。

6. 嵌套/局部/内部类或函数鼓励使用嵌套/本地/内部类或函数。类可以定义在方法中,函数或者类中;函数可以定义在方法或函数中。封闭区间中定义的变量对嵌套函数是只读的。优点:允许定义仅用于有效范围的工具类或函数缺点:嵌套类或局部类的示例不能被序列化

7. 列表推导列表推导和生成器表达式提供了一种简洁高效的方式来创建列表和迭代器,而不必借助map(), filter()或者lambda()优点:简单的列表推导可以比其他的列表创建方法更加清晰简单,生成器表达式可以十分高效,因为他们避免创建整个列表。缺点:复杂的列表推导或者生成器表达式可能难以阅读因此,适用于简单的情况。每个部分应该单独置于一行:映射表达式,for语句,过滤器表达式,禁止多重for语句或过滤器表达式。复杂情况下还是使用for循环。

8. 默认迭代器和操作符如果类型支持,就使用默认的迭代器和操作符,比如列表,字典以及文件。默认操作符和迭代器简单高效,他们直接表达了操作,没有额外的方法调用。使用默认操作符的函数是通用的,它可以用于支持该操作的任何类型。比如:

for key in adict

if key not in adict

if obj in alist

for line in afile

for k, v in dict.iteritems()

9. 生成器按需使用生成器。所谓生成器函数,就是每当他执行一次生成(yield)语句,它就返回一个迭代器,这个迭代器生成一个值。生成值后,生成器函数的运行状态将被挂起,直到下一次生成。优点:简化代码,因为每次调用时,局部变量和控制流的状态都会被保存,比起一次创建一系列之的函数,生成器使用的内存小。

10. lambda函数适用于单行函数。lambda在一个表达式中定义匿名函数,常用于为 map()和filter()之类的高阶函数定义回调函数或者操作符。lambda表达式很方便,但是比本地函数更难阅读和调试,没有函数名意味着堆栈跟踪更难理解。由于lambda函数通常只包含一个表达式,因此其表达能力有限。

11. 条件表达式条件表达式是对于if语句的一种更为简洁的句法规则,适用于单行函数。比如x = 1 if cond else 2

12. 属性访问和设置数据成员时,建议使用属性@property来代替轻量级的访问和设置函数。

13. True/False求值尽可能使用隐式falsepython在布尔上下文中会将某些值求值为false,所有的“空”值都被认为是false。因此,0、False、None、[]、{}都被认为是False使用python布尔值的条件语句更易读也不易出错,大部分情况下也更快。比如

应该:

if not x:

print 'x is an empty list'

不应该:

if x == []:

print 'x is an empty list'

(1)永远不要用==或者!=来比较单件,比如None。使用is或者is not(2)注意:当你写下 if x: 时,其实表示的是 if x is not None:(3)永远不要用 == 将一个布尔量与false比较,使用 if not x 代替,如果需要区分false和None,应该使用if not x and x is not None(4)对于序列(字符串,元组,列表),要注意空序列是false。即if not seq要好于if not len(seq)(5)处理整数时,使用隐式false可能会得不偿失(即不小心将None当做0处理)。可以将一个已知是整型(且不是len()的返回结果)的值与0比较。(6)注意'0'(字符串)会被当做true

14. 过时的语言特性尽可能使用字符串方法取代字符串模块,使用函数调用语法取代apply(),使用列表推导,for循环取代 filter(), map(), reduce().

15. 词法作用域嵌套的python函数可以引用外层函数中定义的变量,但是不能对它们进行赋值。变量绑定的解析是使用词法作用域,也就是基于静态的程序文本。对一个块中的某个名称的任何赋值都会导致python将对该名称的全部引用当做局部变量,甚至是赋值前的处理。如果碰到global声明,该名称就会被视作全局变量。

i = 4

def foo(x):

def bar():

print i

#....

#a bunch of code

#....

for i in x:

print i

bar()

foo([1,2,3])

结果输出 1 2 3 3, 而不是 1 2 3 4

x是一个列表,for循环将x中的值依次赋给i,这样对i的赋值就隐式的发生了,

整个foo函数体中的i都会被当做局部变量,包括bar()中的那一个

对于上面的例子,按照python的解释性语言,过程化、变量随时生成、随时赋值的特性来看待,就非常容易理解。因为 在foo函数中,执行完 for 循环之后,i变量被赋值了,此时执行bar(),i变量仍然为刚刚的那个值。

16. 线程不要依赖内建类型的原子性。虽然python的内建类型例如字典看上去拥有原子操作,但是在某些情形下它们仍然不是原子的。优先使用Queue模块的Queue数据类型作为线程间数据通信方式,另外使用threading模块机器锁原语。了解条件变量的合适使用方式,这样就可以使用threading.Condition 来取代低级别的锁了。

python语言规范_python语言规范相关推荐

  1. c和python的优缺点_Python语言有什么优缺点?

    在很多人眼中,Python是一门全能语言,可以做很多的事情,那么你知道Python有什么优缺点吗?我想这是很多人都比较好奇的问题,我们一起来看看吧. 优点: Python是一种代表简单主义思想的语言, ...

  2. python3编码命名规范_Python代码规范和命名规范

    Python代码规范和命名规范 zoerywzhou@163.com 作者:Zhouwan 2018-4-1 Python之父Guido推荐命名规范包括如下几点: 1.文件名.模块名和包名采用小写字母 ...

  3. python基础编码规范_Python语言的基本语法和编码规范.doc

    Python 语言的基本语法和编码规范 Python 编程教程教师 : 工作 :Python 语言的基本语法和编码标 准课程描述本章将介绍 Python 语言的基本语法和编码标准,重点介 绍 Pyth ...

  4. python 命名规范_python命名规范

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 如class base(object):def __init__(self, i ...

  5. python编程标准_python编程规范

    优美的程序不仅仅靠语言约束,更需要良好的编程规范. 缩进:每一级缩进使用4空格 空格: 逗号.冒号.分号.右括号前不准加空格 操作符左右默认加空格,不能为了对齐加空格 换行.行长度: 每行不超过80字 ...

  6. python股票编程规范_Python 编程规范梳理

    缘由 由于项目团队中新加入了几名攻城狮, 大家之前的背景各不相同,写出的代码也是"风格迥异".正所谓:"无规则不成方圆",因此需要对编程进行必要的规范. 整体的 ...

  7. python语言结构_Python语言表示语句结构时采用

    Python语言表示语句结构时采用 答: 缩进 夏代出现专门的教射和习射的场所是 . 答:序 五行相生相克,又分别对应五种颜色,其中火对应颜色() 答:赤 非暴力沟通中的"表达情绪" ...

  8. python epoll 并发_Python语言之python并发原理(阻塞、非阻塞、epoll)

    本文主要向大家介绍了Python语言之python并发原理(阻塞.非阻塞.epoll),通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 在Linux系统中 01 阻塞服务端 特征: ...

  9. python常考题_Python语言基础考察点:python语言基础常见考题(一)

    一.python是静态还是动态类型?是强类型还是弱类型? 1.动态强类型语言(不少人误以为是弱类型) 不要傻傻分不清 2.动态还是静态指的是编译期还是运行期确定类型 3.强类型指的是不会发生隐式类型转 ...

  10. 学python的前提_Python语言学习前提:条件语句

    一.条件语句 1.条件语句:通过一条或多条语句的执行结果(True或False)来决定执行额代码块.python程序语言指定任何非0或非空(null)的值为true,0或null为false. 2. ...

最新文章

  1. ASP.Net ViewState的实现
  2. 说说“偏差处理”那点事
  3. C 语言编程 — 宏定义与预处理器指令
  4. To-do-List
  5. Pinyin4j中文字符和拼音之间的转换
  6. 李沐等将目标检测绝对精度提升 5%,不牺牲推理速度
  7. 使用Java高速实现进度条
  8. 进击的爱奇艺文学:如何成为苹果园生态的重要一环?
  9. 在JSP中常见问题,防止SpringMVC拦截器拦截js等静态资源文件的解决方案
  10. IOS端与Java端MD5加密方法
  11. netty如何知道连接已经关闭,socket心跳,双工?异步?
  12. 拓端tecdat|R语言法国足球联赛球员多重对应分析(MCA)
  13. idea在mac版怎么配置svn_IntelliJ Idea 集成svn 和使用
  14. Centos安装交叉编译工具链
  15. 游戏编程所需要的知识
  16. opencv raw转rgb_使用OpenCV实现RGB、HSI、CMYK颜色空间的转换
  17. java 重写或者覆父类方法的使用throws 抛出异常,为什么要小于父类父类,java面试点
  18. eclipse报错:The project was not built due to “Could not delete...”. Fix the problem...
  19. FRPS实现内网SSH服务器登陆
  20. web开发技巧-网页排版布局常见问题及解决办法

热门文章

  1. python的函数的笔记_Python笔记-函数1
  2. Grails 基础环境搭建及HelloWorld
  3. 明细表批量新增,修改,删除sql
  4. 基于etcd+confd通过nginx对docker服务混合注册发现详解
  5. Hive学习之六 《Hive进阶— —hive jdbc》 详解
  6. 敏感之敏感 工资的多种可能性
  7. springboot和springframework以及jdk版本的对应关系
  8. hash 图像检索方法汇总
  9. 把word excel ppt 导入到右键快捷菜单中
  10. matlab-自控原理 已知x~=Ax+Bu中的AB矩阵和X0,求单位输入下的时间响应