从网上找到django中python的命名规范

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 = 0XFFFFFF
THIS_IS_A_CONSTANT = 1

变量
变量名全部小写,由下划线连接各个单词,如:
color = WHITE
this_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 缩写为 fn
text 缩写为 txt
object 缩写为 obj
count 缩写为 cnt
number 缩写为 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:
    pass
for 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(r'^mysite/', include('mysite.foo.urls')),

# Uncomment the admin/doc line below to enable
admin documentation:

#
url(r'^admin/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 属性

class Meta:
def __unicode__() :

def
save()

def
get_absolute_url()

其他自定义的methods

如果给一个model field定义了可选择项,那么请将选择项定义为元组(内含很多元组--选择项),将选择项元组名称定义为全部大写,定义放在model的顶部 或者就在model
的上面。

例如,性别选择项GENDER_CHOICES这个名字为全部大写:
GENDER_CHOICES = (
    ('M', 'Male'),
    ('F', 'Female'),
)

django.conf.settings规范:

(1)  settings.py中要使用相对路径:

python 中变量的命名方法的更多相关文章

  1. Python中变量的命名

    变量的命名 目标 标识符和关键字 变量的命名规则 0.1 标识符和关键字 1.1 标识符 标示符就是程序员定义的 变量名.函数名 名字 需要有 见名知义 的效果,见下图: 标示符可以由 字母.下划线 ...

  2. Python中变量的命名与使用(个人总结)

    与众多编程语言一样,Python变量的命名有一定的规范: 变量名只能包含字母.数字.下划线且不能以数字开头.例如,num_1 为正确命名,而 1_num 则错误. 变量名不允许含空格,但是可以用下划线 ...

  3. python 中变量的命名规范

    出自:http://www.diybl.com/course/3_program/python/20111130/563643.html 模块名: 小写字母,单词之间用_分割 ad_stats.py ...

  4. python中变量的命令规制及变量的赋值方式

    文章结构:              一.python中变量的命名规则             二.变量赋值的三种方式             三.python的垃圾回收机制 一.Python中变量的 ...

  5. PySpark 的背后原理--在Driver端,通过Py4j实现在Python中调用Java的方法.pyspark.executor 端一个Executor上同时运行多少个Task,就会有多少个对应的pyspark.worker进程。

    PySpark 的背后原理 Spark主要是由Scala语言开发,为了方便和其他系统集成而不引入scala相关依赖,部分实现使用Java语言开发,例如External Shuffle Service等 ...

  6. Python中变量的作用域(variable scope)

    http://www.crifan.com/summary_python_variable_effective_scope/ 解释python中变量的作用域 示例: 1.代码版 #!/usr/bin/ ...

  7. python中List的sort方法的用法

    python列表排序 简单记一下python中List的sort方法(或者sorted内建函数)的用法. 关键字: python列表排序 python字典排序 sorted List的元素可以是各种东 ...

  8. 【转】python中List的sort方法(或者sorted内建函数)的用法

    原始出处:http://gaopenghigh.iteye.com/blog/1483864 python列表排序 简单记一下python中List的sort方法(或者sorted内建函数)的用法. ...

  9. 【转】关于python中re模块split方法的使用

    注:最近在研究文本处理,需要用到正则切割文本,所以收索到了这篇文章,很有用,谢谢原作者. 原址:http://blog.sciencenet.cn/blog-314114-775285.html 关于 ...

随机推荐

  1. php中关于Map热点的运用

    给图像使用map标签,可以给图像的某个部分建立超连接 一般情况下用在图片上,如:<img src="Images/banner.gif" width="780&qu ...

  2. jstl 标签库的使用

    JSTL 核心标签库 使用   JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out.set.remove.catch 2.流程控制标签:if.choose.when.ot ...

  3. jquery与各种UI框架的导入要注意的地方

    前端的处理我们会使用easyUI,amazeUI,bootstrap等等框架,然而每个页面都要导入这些js   css 文件,所以我们将要导入的文件提取出来,写在一个页面上,每次只要倒入该页面就行,如 ...

  4. dll 和 lib--初级

    今天碰到一个奇怪的问题,一个第三方的库,提供了A.dll和A.lib,编译的时候可以通过,运行的时候一直报错,说找不到A.dll. 我就在main函数那里设了断点,发现没有进main 函数的时候就已经 ...

  5. HTTP Code

    所有 HTTP 状态代码及其定义. 代码  指示  2xx  成功  200  正常:请求已完成.  201  正常:紧接 POST 命令.  202  正常:已接受用于处理,但处理尚未完成.  20 ...

  6. Adb工具配置和设备连接

    ADB全程Android Debug Bridge,是Android SDK里的一个工具,用这个工具可以直接操作管理Android模拟器或者真实的Android设备(如手机). 一.Adb工具使用配置 ...

  7. 神一样的CSDN博客排名规则

    本文转载于:http://blog.csdn.net/littletigerat/article/details/17448521 神一样的CSDN博客排名规则 一.引言 年. 马年CSDN博客,毫无 ...

  8. createjs 入门之EaselJs 绘制图片Bitmap

    var canvas=document.getElementById('demoCanvas'); canvas.width=window.innerWidth; canvas.height=wind ...

  9. vim中添加多行注释和删除多行注释

    1.多行注释:   a. 按下Ctrl + v,进入列模式;   b. 在行首选择需要注释的行;   c. 按下"I",进入插入模式:  d. 然后输入注释符("//&q ...

  10. 2016-12-15 java开发工作中,尚未做的工作

    目前未涉及的工作内容: 1.将静态页导入工程,建成jsp文件.配置css.js.img文件.跳转路径 2.未用工具生成pojo dao service等源码文件 3.未签入自己写的代码 4.未搭建子系 ...