Python命名规范1.doc_第1页
Python命名规范1.doc_第2页
Python命名规范1.doc_第3页
Python命名规范1.doc_第4页
Python命名规范1.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Python 规范代码的布局编码所有的Python脚本文件都应在文件头标上“# -*- coding:utf-8 -*-”。 缩进4个空格一个缩进层次空行适当的空行有利于增加代码的可读性,加空行可以参考如下几个准则: (1) 在类、函数的定义间加空行;(2) 在import不同种类的模块间加工行;(3) 在函数中的逻辑段落间加空行,即把相关的代码紧凑写在一起,作为一个逻辑段落,段落间以空行分隔换行 语句比较长,一行写不下的情况下使用1. 在括号(包括圆括号、方括号和花括号)内换行,如:class Edit(CBase): def _init_(self, parent, width,font = FONT, color = BLACK, pos = POS, style = 0):或:very_very_very_long_variable_name = Edit(parent, width, font, color, pos)如果行长到连第一个括号内的参数都放不下,则每个元素都单独占一行:very_very_very_long_variable_name = ui.widgets.Edit( panrent, width, font, color, pos) 2. 在长行加入续行符强行断行,断行的位置应在操作符前,且换行后多一个缩进,以使维护人员看代码的时候看到代码行首即可判定这里存在换行,如:if color = WHITE or color = BLACK or color = BLUE: # 注意or操作符在新行的行首而不是旧行的行尾 do_something(color);命名约定有许多不同的命名风格。以下的有助于辨认正在使用的命名风格,独立于它们的作用。 以下的命名风格是众所周知的: b (单个小写字母) B (单个大写字母) Lowercase(小写) lower_case_with_underscores(有下划线的小写) UPPERCASE(大写)UPPER_CASE_WITH_UNDERSCORES(有下划线的大写)应避免的名字。永远不要用字符l(小写字母el(就是读音,下同),O(大写字母oh),或I(大写字母eye)作为单字符的变量名。在某些字体中这些字符不能与数字1和0分辨。试着在使用l时用L代替。常量常量名所有字母大写,由下划线连接各个单词,如:WHITE = 0XFFFFFFTHIS_IS_A_CONSTANT = 1变量变量名全部小写,由下划线连接各个单词,如:color = WHITEthis_is_a_variable = 1不论是类成员变量还是全局变量,均不使用 m 或 g 前缀。私有类成员使用单一下划线前缀标识,多定义公开成员,少定义私有成员。变量名不应带有类型信息,因为 Python 是动态类型语言。如 iValue、names_list、dict_obj 等都是不好的命名。全局变量名 这些约定和在函数中的一样。模块是被设计为通过“from M import *”来使用的,必须用一个下划线作全局变量(及内部函数和类)的前缀防止其被导出(exporting)。函数函数名的命名规则与变量名相同。类类名单词首字母大写,不使用下划线连接单词,也不加入 C、T 等前缀。如:class ThisIsAClass(object): passs模块模块名全部小写,对于包内使用的模块,可以加一个下划线前缀,如:module.py_internal_module.py包包的命名规范与模块相同。缩写命名应当尽量使用全拼写的单词,缩写的情况有如下两种: 1 命名中含有长单词,对某个单词进行缩写。这时应使用约定成俗的缩写方式,如去除元音、包含辅音的首字符等方式,例如:function 缩写为 fntext 缩写为 txtobject 缩写为 objcount 缩写为 cntnumber 缩写为 num,等。特定命名方式,主要是指 _xxx_ 形式的系统保留字命名法。项目中也可以使用这种命名,它的意义在于这种形式的变量是只读的,这种形式的类成员函数尽量不要重载。异常名如果模块对所有情况定义了单个异常,它通常被叫做“error”或“Error”。似乎内建(扩展)的模块使用“error”(例如:os.error),而Python模块通常用“Error” (例如:xdrlib.Error)。趋势似乎是倾向使用CapWords异常名语句 import import 语句有以下几个原则需要遵守: (1)import 的次序,先 import Python 内置模块,再 import 第三方模块,最后 import 自己开发的项目中的其它模块;这几种模块中用空行分隔开来。(2) 一条 import 语句 import 一个模块。(3)当从模块中 import 多个对象且超过一行时,使用如下断行法from module import (obj1, obj2, obj3, obj4, obj5, obj6)(4)不要使用 from module import *,除非是 import 常量定义模块或其它你确保不会出现命名空间冲突的模块。2 分枝和循环 对于分枝和循环,有如下几点需要注意的: 不要写成一行,如:If !flg: pass 和 for i in xrange(10): print i都不是好代码,应写成if !flg: passfor i in xrange(10): print i其它建议 始终在这些二元运算符两边放置一个空格:赋值(=), 比较(=,!=,=,in,not in,is,is not),布尔运算 (and,or,not)。 按你的看法在算术运算符周围插入空格。 始终保持二元运算符两边空格的一致。 一些例子:#!Python i = i+1 submitted = submitted + 1 x = x*2 - 1 hypot2 = x*x + y*y c = (a+b) * (a-b) c = (a + b) * (a - b) 不要在用于指定关键字参数或默认参数值的=号周围使用空格,例如:#!Python def complex(real, imag=0。0): return magic(r=real, i=imag)注释以#号开头同代码不一致的注释比没注释更差。当代码修改时,始终优先更新注释!注释应该是完整的句子,如果注释是一个短语或句子,首字母应该大写,除非他是一个以小写字母开头的标识符(永远不要修改标识符的大小写)。 如果注释很短,最好省略末尾的句号。注释块注释块通常应用于跟随着一些(或者全部)代码并和这些代码有着相同的缩进层次。注释块中每行以#和一个空格开始(除非他是注释内的缩进文本)。注释块内的段落以仅含单个#的行分割。注释块上下方最好有一空行包围(或上方两行下方一行,对一个新函数定义段的注释)。# url(rmysite/, include(mysite.foo.urls), # Uncomment the admin/doc line below to enable admin documentation:# url(radmin/doc/, include(django.contrib.admindocs.urls),行内注释 一个行内注释是和语句在同一行的注释,行内注释应该谨慎适用,行内注释应该至少用两个空格和语句分开,它们应该以#和单个空格开始。 x = x+1 # Increment x 如果语意是很明了的,那么行内注释是不必要的,事实上是应该被移除的。不要这样写: x = x+1 # Increment x x = x+1 # Compensate for border 但是有时,这样是有益的: x = x+1 # Compensate for border继承的设计始终要确定一个类中的方法和实例变量是否要被公开。通常,永远不要将数据变量公开,除非你实现的本质上只是记录,人们几乎总是更喜欢代之给出一个函数作为类的界面(Python 2.2 的一些开发者在这点上做得非常漂亮)。同样,确定你的属性是否应为私有的。私有和非私有的区别在于模板将永远不会对原有的类(导出类)有效,而后者可以。你应该在大脑中就用继承设计好了你的类,私有属性必须有两个前导下划线,无后置下划线,非公有属性必须有一个前导下划线,无后置下划线,公共属性没有前导和后置下划线,除非它们与保留字冲突,在此情况下,单个后置下划线比前置或混乱的拼写要好,例如:class_优于klass。最后一点有些争议:如果相比class_你更喜欢klass,那么这只是一致性问题。设计建议单个元素(singletons)的比较,如None 应该永远用:is或is not来做。当你本意是“if x is not None”时,对写成“if x”要小心。例如当你测试一个默认为None的变量或参数是否被设置为其它值时,这个值也许在布尔上下文(Boolean context)中是false!基于类的异常总是好过基于字符串的异常。模块和包应该定义它们自己的域内特定的基异常类,基类应该是内建的Exception类的子类。还始终包含一个类的文档字符串。例如:#!Python class MessageError(Exception): Base class for errors in the email package。使用字符串方法(methods)代替字符串模块,除非必须向后兼容Python 2.0以前的版本。字符串方法总是非常快,而且和unicode字符串共用同样的API(应用程序接口)在检查前缀或后缀时避免对字符串进行切片。用startswith()和endswith()代替,因为它们是明确的并且错误更少。例如: No:if foo:3 = bar: Yes: if foo。startswith(bar):例外是如果你的代码必须工作在Python 1.5.2 (但是我们希望它不会发生!),对象类型的比较应该始终用isinstance()代替直接比较类型,例如: No:if type(obj) is type(1): Yes: if isinstance(obj, int):检查一个对象是否是字符串时,紧记它也可能是unicode字符串!在Python 2.3,str和unicode有公共的基类,basestring,所以你可以这样做: if isinstance(obj, basestring):在Python 2.2类型模块为此定义了StringTypes类型,例如:#!Python from types import StringTypes if isinstance(obj, StringTypes):在Python 2.0和2.1,你应该这样做:#!Python from types import StringType, UnicodeType if isinstance(obj, StringType) or isinstance(obj, UnicodeType) :对序列,(字符串,列表,元组),使用空列表是false这个事实,因此“if not seq”或“if seq”比“if len(seq)”或“if not len(seq)”好。书写字符串文字时不要依赖于有意义的后置空格。这种后置空格在视觉上是不可辨别的,并且有些编辑器(特别是近来,reindent.py)会将它们修整掉。不要用=来比较布尔型的值以确定是True或False(布尔型是Pythn 2.3中新增的) No:if greeting = True: Yes: if greeting: No:if greeting = True: Yes: if greeting:Django 使用规范(1) 模版规则:在模版中,大括号里的关键词前后应该插入空格如: foo 而不是:foo(2) 视图的规则:在视图中,第一个参数应该写成request如:def my_view (request , foo): #而不是: def my_view (foo ,request): #Model 规范 (1) 里边的字段名应该小写,可以使用下划线:如: class Person(models.Model): first_name = models.CharField(max_length=20) last_name = models.CharField(max_length=40)而不是: class Person(models.Model): Frst_name = models.CharField(max_length=20) LAST = models.CharField(max_length=40)(2)两个class之间用空白行隔开(3)model 内的classes 和 methods 应该采取以下的顺序(这些方法并不是所有的class都要定义):所有的数据项的field自定义的manager 属性clas

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论