Python代码规范样必知必会
⼀ PEP8规范是什么?
PEP是Python Enhancement Proposal的缩写,通常翻译为“Python增强提案”。
每个PEP都是⼀份为Python社区提供的指导Python往更好的⽅向发展的技术⽂档,其中的第8号增强提案(PEP 8)是针对Python语⾔编订的代码风格指南。
doubleclick是什么意思尽管我们可以在保证语法没有问题的前提下随意书写Python代码,但是在实际开发中,采⽤⼀致的风格书写出可读性强的代码是每个专业的程序员应该做到的事情,也是每个公司的编程规范中会提出的要求,这些在多⼈协作开发⼀个项⽬(团队开发)的时候显得尤为重要。
⼀ .代码布局
1、使⽤空格来表⽰缩进⽽不要⽤制表符(Tab)。这⼀点对习惯了其他编程语⾔的⼈来说简直觉得不可理喻,因为绝⼤多数的程序员都会⽤Tab来表⽰缩进,但是要知道Python并没有像C/C++或Java那样的⽤花括号来构造⼀个代码块的语法,在Python中分⽀和循环结构都使⽤缩进来表⽰哪些代码属于同⼀个级别,鉴于此Python代码对缩进以及缩进宽度的依赖⽐其他很多语⾔都强得多。在不同的编辑器
中,Tab的宽度可能是2、4或8个字符,甚⾄是其他更离谱的值,⽤Tab来表⽰缩进对Python代码来说可能是⼀场灾难。
2、和语法相关的每⼀层缩进都⽤4个空格来表⽰。
3、每⾏的字符数不要超过79个字符,如果表达式因太长⽽占据了多⾏,除了⾸⾏之外的其余各⾏都应该在正常的缩进宽度上再加上4个空格。
4、函数和类的定义,代码前后都要⽤两个空⾏进⾏分隔。
5、在同⼀个类中,各个⽅法之间应该⽤⼀个空⾏进⾏分隔。
6、⼆元运算符的左右两侧应该保留⼀个空格,⽽且只要⼀个空格就好。
python倒序输出2.2 标识符命名
PEP 8倡导⽤不同的命名风格来命名Python中不同的标识符,以便在阅读代码时能够通过标识符的名称来确定该标识符在Python中扮演了怎样的⾓⾊(在这⼀点上,Python⾃⼰的内置模块以及某些第三⽅模块都做得并不是很好)。
1、变量、函数和属性应该使⽤⼩写字母来拼写,如果有多个单词就使⽤下划线进⾏连接。
2、类中受保护的实例属性,应该以⼀个下划线开头。
3、类中私有的实例属性,应该以两个下划线开头。
4、类和异常的命名,应该每个单词⾸字母⼤写。
5、模块级别的常量,应该采⽤全⼤写字母,如果有多个单词就⽤下划线进⾏连接。
6、类的实例⽅法,应该把第⼀个参数命名为self以表⽰对象⾃⾝。
7、类的类⽅法,应该把第⼀个参数命名为cls以表⽰该类⾃⾝。
2.3 表达式和语句
1、采⽤内联形式的否定词,⽽不要把否定词放在整个表达式的前⾯。例如if a is not b就⽐if not a is b更容易让⼈理解。
2、不要⽤检查长度的⽅式来判断字符串、列表等是否为None或者没有元素,应该⽤if not x这样的写法来检查它。
3、就算if分⽀、for循环、except异常捕获等中只有⼀⾏代码,也不要将代码和if、for、except等写在
⼀起,分开写才会让代码更清晰。
4、import语句总是放在⽂件开头的地⽅。
5、引⼊模块的时候,from math import sqrt⽐import math更好。
6、如果有多个import语句,应该将其分为三部分,从上到下分别是Python标准模块、第三⽅模块和⾃定义模块,每个部分内部应该按照模块名称的字母表顺序来排列。
1.1 缩进
⾏长度补充说明:
长的导⼊模块语句
注释⾥的URL
不要使⽤反斜杠连接⾏.
Python会将 圆括号, 中括号和花括号中的⾏隐式的连接起来 , 你可以利⽤这个特点. 如果需要, 你可以在表达式外围增加⼀对额外的圆括号.
Yes: foo_bar(self, width, height, color='black', design=None, x='foo',
emphasis=None, highlight=0)
if (width == 0 and height == 0 and
color == 'red' and emphasis == 'strong'):
如果⼀个⽂本字符串在⼀⾏放不下, 可以使⽤圆括号来实现隐式⾏连接:
软件开发工程师就业和发展前景x = ('This will build a very long long '
'long long long long long long string')
在注释中,如果必要,将长的URL放在⼀⾏上
Yes: # See details at
# ample/us/developer/documentation/api/content/v2.0/csv_file_name_extension_full_specification.html
1.2 表达式和语句中的空格
在⼆元操作符两边都加上⼀个空格, ⽐如赋值(=), ⽐较(==, <, >, !=, <>, <=, >=, in, not in, is, is not), 布尔(and, or, not). ⾄于算术操作符两边的空格该如何使⽤, 需要你⾃⼰好好判断. 不过两侧务必要保持⼀致.
(1)在⼆元算术、逻辑运算符前后加空格,如:
⽰例:
a =
b + c
if a and b:
pass
当’=’⽤于指⽰关键字参数或默认参数值时, 不要在其两侧使⽤空格.
Yes: def complex(real, imag=0.0): return magic(r=real, i=imag)
(2)在⼀元前缀运算符后不加空格,如:
⽰例:
if !flg:
pass
(3)“:”⽤在⾏尾时前后皆不加空格,如分⽀、循环、函数和类定义语⾔;⽤在⾮⾏尾时后端加空格,如dict对象的定义:
⽰例:
d = {'key': 'value'}
(4)括号(含圆括号、⽅括号和花括号)前后不加空格,不要在逗号, 分号, 冒号前⾯加空格, 但应该在它们后⾯加(除了在⾏尾) 如:
⽰例:
do_something(arg1, arg2)
dict['key'] = list[index]
1.3 ⾏的最⼤长度
每⾏的最⼤长度不得超过80个字符的标准。超过80个字符的,建议使⽤以下⽅式将单个长⾏折叠成多个短⾏:(1)为长变量名换⼀个短名,如:
错误写法:
this.is.a.very.long.variable_name = this.is.another.long.variable_name
python基础代码大全加翻译正确写法:
variable_name1 = this.is.a.very.long.variable_name
variable_name2 = this.is.another.variable_name
variable_name1 = variable_name2
(2)在括号(包括圆括号、⽅括号和花括号)内的分隔符后换⾏,如:
⽰例:
class Edit(Base):
def __init__(self, parent, width,
font = FONT, color = BLACK, pos = POS, style = 0): # 注意:此⾏与上⼀⾏保持同样缩进
pass
(3)在长⾏加⼊续⾏符强⾏断⾏,断⾏的位置应在操作符前,如:
⽰例:
if color == WHITE or color == BLACK \
or color == BLUE: # 注意:换⾏与⾸⾏保持同样的缩进(或均不缩进)
do_something(color)
1.4 空⾏
输⼊空⾏时,⼀般遵循以下原则:
(1)在import不同种类的模块间加空⾏;
(2)顶层函数和类的定义之间加空⾏;
(3)在类与类的定义之间加空⾏;
class A:
def __init__(self):
pass
def hello(self):
pass
def main():
pass
(4)在函数与函数的定义之间加空⾏;
(5)在class定义⾏和其第⼀个⽅法定义之间加空⾏;
(6)在函数中的逻辑段落间加空⾏,即把相关的代码紧凑写在⼀起,作为⼀个逻辑段落,段落间以空⾏分隔
(7)函数的开头和结尾需空两⾏
def say_hello(): # 开头空两⾏
"""
greet,say_hello
:return:
process safety and environment"""
print("hello") # 结尾空两⾏
say_hello() # 调⽤
1.5 编码
所有的Python脚本⽂件都应在⽂件头标上#-- coding:utf8 -- ;⽤于设置编辑器,默认保存为utf8格式:
#-*- coding:utf8 -*-
⼆.语句
2.1 标准头部
⼀般情况下使⽤如下标准头部语句:
#!/usr/bin/python
如果需要使⽤⾃定义的Python编译环境,可使⽤类似如下的头部语句:
#!/usr/bin/env python3.6
**说明:**该⾏语句的作⽤是帮助内核到Python解释器,但通常在Python导⼊模块时被忽略;只有直接执⾏单个⽂件时,该语句才是必要的。
2.2 导⼊(import)
\1. 通常应该在单独的⾏中导⼊(import),例如“正确写法1”;若需要在⼀⾏中从⼀个模块导⼊多个类,可参照“正确写法
字体加粗转换器错误写法:
import sys, os
正确写法1:
import sys
import os
正确写法2:
from types import StringType, ListType
\2. 导⼊语句的位置及导⼊顺序
通常将import语句放置在⽂件的顶部,仅在模块注释和⽂档字符串之后,在模块的全局变量和常量之前。导⼊语句应该有顺序地成组安放:(1)⾸先,导⼊标准库(内置模块);
(2)其次,导⼊第三⽅模块(引⽤的第三⽅包);
(3)最后,导⼊⾃⼰开发的项⽬中的其他模块;
在每组导⼊之间放置⼀个空⾏。
\3. 导⼊类的⽅法
从⼀个包含类的模块中导⼊类时,通常可以写成这样
⽰例:
from MyClass import MyClass
from foo.bar.YourClass import YourClass
如果上述写法导致了本地名字冲突,那么就这样写:
⽰例:
import MyClass
import foo.bar.YourClass
然后使⽤MyClass.MyClass和foo.bar.YourClass.YourClass⽅式即可。
2.3 赋值
对于赋值语⾔,= 左右应各保留⼀个空格 主要是不要做⽆谓的对齐,如:错误写法:
a = 1
var = 2
fn = callback_function
正确写法:
a = 1
var = 2
fn = callback_function
2.4 分⽀和循环
各种分⽀和循环语句不要写成⼀⾏,如:
错误写法:
if !flg: pass
for i in xrange(10): print i
正确写法:
if !flg:
pass
for i in xrange(10):
print i
三. 注释
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论