python代码规范 - Go语言中文社区

python代码规范


为什么要有代码规范?
1.做哪一行都有高低级别之分,别写一行代码就被人鄙视了
2.好的规范会形成好的编码风格,看着熟悉、亲切,心情好
3.增加可读性,易维护,提高工作效率
4.遵循规范,代码会自己写代码
5.国家为啥要有法律,就是为了管理

python代码规范
1.缩进
4个空格,在linux系统下体现比较明显,IDE会将Tab转成4个空格,放心使用

2.行的最大长度
每行代码的最长字符数不超过80个,一屏可以看完,不需要左右移动

3.空行
本页的一级类或者方法之间空2行,二级类和方法之间空1行

class A(object):
    # 空1行
    def __init__(self):
        a = 1
    # 空1行 
    class B(object):
        b = 1
    # 空1行   
    class C(object):
        c = 1
    # 空1行
    def aa(self):
        aa = self.B()
# 空1行
# 空1行
class B(object):
    # 空1行
    def __init__(self):
        a = 1
# 空1行
# 空1行
def a():
    return True
# 页尾空1行

4.类命名
大驼峰命名:所有单词的首字母都大写,并且不使用特殊字符、下划线和数字

# ✔️
class CodeStandard(object):

# ❌
class Code-Standard(object):
class Code_Standard(object):
class _CodeStandard(object):
class codeStandard(object):
class Codestandard(object):
class Codestandard2(object):

5.方法命名
全小写字符或者下划线,多单词用下划线连接,但下划线不能做首字母

# ✔️
def code_standard():

# ❌
def Code_standard():
def _codestandard():  # 內建函数,受保护
def __codestandard():  # 內建函数,受保护
def code__standard():
def codestandard():

6.常量命名
以大写字母开头,全部大写字母或下划线或数字,多见于项目的settings文件中

MAX_SIZE = 100

7.注释
单行注释:若注释独占一行,#号顶头,空1格后写注释;若是行尾注释,空2格后#号再空1格写注释
多行注释:三对双引号(推荐使用)和三对单引号
复杂逻辑一定要写注释,除非这个项目就你一个人管一辈子

# 代码注释
def code_standard():  # 代码注释

"""
A...
B...
"""

'''
A...
B...
'''

8.导入
每个文件头,都会有一些导入,导入顺序为:先导入python包,再导入第三方包,最后导入自定义的包。不使用的包不要导入,不要两个文件循环导入

import sys, os  # python包,可导入多个
import pytz  # 第三方包
from datetime import datetime  # python包
from django.http import request, response  # 第三方包
from mysite.test import Test  # 自定义包
from mysite.test import *  # 不要让我看到 import * 的这种代码,看到一次,我扣光你绩效

9.空格
给变量赋值时,变量后空1个格,运算符或逗号后空1个格,作为参数时符号前后不空格

# ✔️
a = 1
a += 2
def b(num=0):

# ❌
a = 111  # 不要值都右对齐,整些没有用的
b =   2
c =  23

10.try
代码中要尽量少的出现 异常捕获 的代码,有些临界值或极值你是可以预见的,如果没有预见,那就让代码报错,重新修改代码,这是一个好的方式,加多了异常捕获,反而会导致问题难以定位,劳心劳力,劳民伤财,编码的好心情就没了。异常也分好多种类型,可以根据不同的类型去做出相应的逻辑处理

# ❌
try:
    a += 2
except Exception, e:
    log.error(e)  # 最讨厌这种,出错无法定位,简直就是披着羊皮的狼

11.全局变量名
没有特殊需求,不要使用全局变量,有时候自己怎么掉坑里了都不知道

global aa

12.变量和传参不要使用关键字

# ❌
len = 0
type = 'mysql'
id = 1
str = 'ffe'
def aa(type='mongo'):

13.方法的参数默认值中,不要有列表的默认值(参数传的是指针)

# ❌
def a(a, b=[]):
    b.append(a)
    return b

>>> a(1, b=list('a'))
['a', 1]
>>> a(2, b=list('a'))
['a', 2]
>>> a('a')
['a']
>>> a('b')
['a', 'b']
>>> a('c')
['a', 'b', 'c']  # 这就是经常说,为啥我的结果有以前的重复的数据,解决:方法头重新定义列表

14.方法的返回值
优先返回True或False,
其次是返回数据,但一定要保证返回的数据类型是一致的,别if里返回的是True,else里返回的是数据。很伤脑筋的。

django项目规范

.
├── README.md  # 项目说明
├── db.sqlite3  # sqlite文件数据库,一般采用关系型和非关系型数据库(没有此文件)
├── draw  # 主项目目录(里面可建多app)
│   ├── __init__.py  # 导入的根文件
│   ├── admin.py  # 项目管理员配置看到的信息
│   ├── migrations  # 数据库迁移脚本目录
│   │   ├── 0001_initial.py  # 迁移脚本
│   │   └── __init__.py
│   ├── models.py  # 数据建模,项目中最重要的东西
│   ├── settings.py  # 项目的环境变量
│   ├── urls.py  # 项目的路由,url的跳转(不要使用反射,url规范如下)
│   ├── views.py  # 视图层,逻辑处理
│   └── wsgi.py  # 项目服务的启动入口
├── manage.py  # 项目命令的入口
├── media  # 上传上来的媒体文件的存放位置
│   └── avatar  # 分类目录
│       └── mac_bsk3xvr.png  # 媒体文件(头像)
├── requirements.txt  # 项目使用的环境包和版本
├── static  # 项目使用的静态文件目录
│   ├── css  # 样式文件目录
│   │   └── application.css  # 样式文件
│   ├── img  # 图片目录
│   │   ├── header_bg.jpg  # 图片文件
│   │   ├── header_bg1.jpg
│   │   ├── header_bg_repeat.png
│   │   └── header_icons.png
│   └── js  # 脚本目录
│       ├── application.js  # 脚本目录
│       ├── jquery-1.8.0.min.js
│       └── rand.js
└── templates  # html模板目录
    └── index.html  # html文件

url规范
优秀的URL是可以表达这个接口所实现的功能的

api/zoos/   #所有动物园  
api/zoos/1/   #id为1的动物园  
api/zoos/1/animals/   #id为1的动物园中的所有动物  

来做两道多选题:

修改某动物园里的动物的数量。
A. api/zoos/count/
B. api/zoos/{id}/amount/
C. api/zoos/{id}/animals/count/
D. api/zoos/{id}/animals/amount/
E. All above

查询某动物园的哪些动物体重超过30kg?
A. api/zoos/animals/weight/30/
B. api/zoos/{id}/animals/weight/30/
C. api/animals/?zoos={id}&weight=30
D. api/zoos/areas/animals/?weight=30
E. All above

python典型写法

a, b = (1, 2)

a, b = 1, 2

a, b = b, a

c = a if a > b else b

aa = [1,2,3,4,5]
c = [n for n in aa if a > 2]  # 推导式

with open(a.txt) as f:
    ...
   
匿名函数-lambda
g = lambda s: s + ".fsh"
g("haha")
haha.fsh

高阶函数-filter、reduce、map
aa = ['a', 'b','c', 'd']
def fun1(s):
    return s if s != 'a' else None
ret = filter(fun1, aa)
ret
['b', 'c', 'd']

修饰器-@

这里写图片描述

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/dqchouyang/article/details/81714619
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-13 15:37:45
  • 阅读 ( 1164 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢